获取长度为 n 的子列表的组合
Get combination of sublists with length n
假设我有一个列表 lst = [[[24, 25], [25, 26], [25, 35]], [[24, 25, 26], [26, 36, 46]]]
。
我想计算来自其他子列表的所有元素的所有组合,但 不是 相同的子列表。在这个例子中它将是:
[[24, 25], [24, 25, 26]],
[[25, 26], [24, 25, 26]],
[[25, 35], [24, 25, 26]],
[[24, 25], [26, 36, 46]],
[[25, 26], [26, 36, 46]],
[[25, 35], [26, 36, 46]]
然而,这也应该能够产生超过 2 个元素的组合,即 lst = [[[1]], [[2], [3]], [[4], [5]]]; (length=len(lst) -> 3)
:
[[1], [2], [4]],
[[1], [2], [5]],
[[1], [3], [4]],
[[1], [3], [5]]
我试过 itertools.combinations(*lst)
但那只能生成长度为 2 的元组。
我怎样才能实现长度 n 与上述限制的组合?
使用itertools.product
生成两个或更多迭代器的笛卡尔积:
from itertools import product
top = [[[24, 25], [25, 26], [25, 35]], [[24, 25, 26], [26, 36, 46]]]
for combo in product(*top):
print(combo)
输出:
([24, 25], [24, 25, 26])
([24, 25], [26, 36, 46])
([25, 26], [24, 25, 26])
([25, 26], [26, 36, 46])
([25, 35], [24, 25, 26])
([25, 35], [26, 36, 46])
假设我有一个列表 lst = [[[24, 25], [25, 26], [25, 35]], [[24, 25, 26], [26, 36, 46]]]
。
我想计算来自其他子列表的所有元素的所有组合,但 不是 相同的子列表。在这个例子中它将是:
[[24, 25], [24, 25, 26]],
[[25, 26], [24, 25, 26]],
[[25, 35], [24, 25, 26]],
[[24, 25], [26, 36, 46]],
[[25, 26], [26, 36, 46]],
[[25, 35], [26, 36, 46]]
然而,这也应该能够产生超过 2 个元素的组合,即 lst = [[[1]], [[2], [3]], [[4], [5]]]; (length=len(lst) -> 3)
:
[[1], [2], [4]],
[[1], [2], [5]],
[[1], [3], [4]],
[[1], [3], [5]]
我试过 itertools.combinations(*lst)
但那只能生成长度为 2 的元组。
我怎样才能实现长度 n 与上述限制的组合?
使用itertools.product
生成两个或更多迭代器的笛卡尔积:
from itertools import product
top = [[[24, 25], [25, 26], [25, 35]], [[24, 25, 26], [26, 36, 46]]]
for combo in product(*top):
print(combo)
输出:
([24, 25], [24, 25, 26])
([24, 25], [26, 36, 46])
([25, 26], [24, 25, 26])
([25, 26], [26, 36, 46])
([25, 35], [24, 25, 26])
([25, 35], [26, 36, 46])