python - 我正在寻找在 python 中生成列表列表的组合
问题描述
认为
L=[1,2,3...8]
我需要的是这个
[
[[1,2,3,5],[4,6,7,8]] ,
[[1 2 4 7] [3,5,6,8]] ,
..... ]
列表中的元素数量应该取决于用户并且列表是不相交的。我真的不知道如何在 python 中做到这一点
解决方案
IIUC 在每次迭代时获得permutations
并range
把列表分成两个块:
from itertools import permutations
l = range(1,9)
n = len(l)//2
[[[*r[:n]],[*r[n:]]] for r in permutations(l)]
[[[1, 2, 3, 4], [5, 6, 7, 8]],
[[1, 2, 3, 4], [5, 6, 8, 7]],
[[1, 2, 3, 4], [5, 7, 6, 8]],
[[1, 2, 3, 4], [5, 7, 8, 6]],
[[1, 2, 3, 4], [5, 8, 6, 7]],
[[1, 2, 3, 4], [5, 8, 7, 6]],
...
要拆分成任意大小的块(例如4
),您可以使用嵌套列表推导。请记住,对于更大的尺寸,您最终会得到大量的排列。您可以使用生成器,然后使用第一个生成n
器itertools.islice
:
from itertools import islice
l = range(1,25)
n = len(l)
s = n//4
list(islice(([r[i:i+s] for i in range(0,n,s)] for r in permutations(l)), 5))
[[(1, 2, 3, 4, 5, 6),
(7, 8, 9, 10, 11, 12),
(13, 14, 15, 16, 17, 18),
(19, 20, 21, 22, 23, 24)],
[(1, 2, 3, 4, 5, 6),
(7, 8, 9, 10, 11, 12),
(13, 14, 15, 16, 17, 18),
(19, 20, 21, 22, 24, 23)],
[(1, 2, 3, 4, 5, 6),
(7, 8, 9, 10, 11, 12),
(13, 14, 15, 16, 17, 18),
(19, 20, 21, 23, 22, 24)],
...
推荐阅读
- translation - 是否可以从翻译中创建新的 .po 文件?
- bash - 理解 shuf 工作原理的 bash 脚本问题
- vue.js - 不加载 Vuetify 安装
- c - 如何检查是否在 C 中正确释放了 struct 的内存?
- nginx - Nginx文件服务器典型配置
- java - Spring Boot API - 如何确保没有并发问题
- arrays - 在数组 mongodb 中使用 concat 的问题
- vue.js - Vue js如何使用从index.html到docs文件夹的路由
- javascript - 为什么跨站点使用限制 iframe DOM 访问?
- python - 我可以在python中的一行代码之间添加注释而不注释整行吗?