【发布时间】:2019-03-22 08:44:26
【问题描述】:
我是 Python 新手,刚刚遇到“itertools”模块。我想用多个列表创建这种特定类型的组合:
1) 重复后一个列表的第一个元素 2) 后一个值在组合内按升序排列
例如对于这两个列表
a=[1,2,3]
b=[None,4,5,6]
期望的结果是
[(1, None), (2, None), (3, None)]
[(1, None), (2, None), (3, 4)]
[(1, None), (2, None), (3, 5)]
[(1, None), (2, None), (3, 6)]
[(1, None), (2, 4), (3, None)]
[(1, None), (2, 4), (3, 5)]
[(1, None), (2, 4), (3, 6)]
[(1, None), (2, 5), (3, None)]
[(1, None), (2, 5), (3, 6)]
[(1, None), (2, 6), (3, None)]
[(1, 4), (2, None), (3, None)]
[(1, 4), (2, None), (3, 5)]
[(1, 4), (2, None), (3, 6)]
[(1, 4), (2, 5), (3, None)]
[(1, 4), (2, 5), (3, 6)]
[(1, 4), (2, 6), (3, None)]
[(1, 5), (2, None), (3, None)]
[(1, 5), (2, None), (3, 6)]
[(1, 5), (2, 6), (3, None)]
[(1, 6), (2, None), (3, None)]
即总共有 C(n+2,m) 个组合,其中 n=len(b) 和 m=len(a)。在这种情况下,有 C(4+2,3)=20 种组合。
我想知道是否有一种有效的方法可以使用“itertools”来获得结果。另外,请注意可能有 2 个以上的列表,例如可能有一个 c=[None,7,8,9,10],导致每个元组中有 3 个元素。
编辑: 我已经设法使用下面的代码获得了我想要的东西,尽管效率低下。如果您有更好的方法来解决此问题,请告诉我。谢谢:)
a=[1,2,3]
b=[4,5,6]
def create_none(lst):
none_list=[]
for Index in range(len(lst)):
none_list.append(None)
return none_list
extended_list=create_none(a)[:]
extended_list.extend(b)
for i in itertools.combinations(extended_list,len(a)):
sublist=list(zip(a,i))
print(sublist)
【问题讨论】:
标签: python