我正在制作一个程序,我需要重复制作一个包含n个项目列表中2个项目的子集列表。
例如,假设这是列表(实际列表中有更多项目):
list = [50, 100, 250, 500, 750, 1000, 2000]
我需要一个带有列表和2之类的数字的函数,然后返回一个这样的列表:
[[50,100], [50,250], [50, 500], [50, 750], [50, 1000], [50, 2000], [100, 250],...]
如你所见,我不希望答案中的数字与[50,100],[100,50]相同。
我认为这是查找列表的所有子集的算法:
from itertools import chain, combinations
def powerset(iterable):
xs = list(iterable)
return list(chain.from_iterable(combinations(xs,n) for n in range(len(xs)+1)))
感谢您的帮助。
答案 0 :(得分:3)
这将完成这项工作:
l = [50, 100, 250, 500, 750, 1000, 2000]
from itertools import combinations
res=list(combinations(l,2))
print(res)
打印
[(50, 100),
(50, 250),
(50, 500),
(50, 750),
(50, 1000),
(50, 2000),
(100, 250),
(100, 500),
(100, 750),
(100, 1000),
(100, 2000),
(250, 500),
(250, 750),
(250, 1000),
(250, 2000),
(500, 750),
(500, 1000),
(500, 2000),
(750, 1000),
(750, 2000),
(1000, 2000)]
答案 1 :(得分:1)
combinations(l,2)
出了什么问题?
print list(combinations(l,2))
# [(50, 100), (50, 250), (50, 500), (50, 750), (50, 1000), (50, 2000), (100, 250), (100, 500), (100, 750), (100, 1000), (100, 2000), (250, 500), (250, 750), (250, 1000), (250, 2000), (500, 750), (500, 1000), (500, 2000), (750, 1000), (750, 2000), (1000, 2000)]