如何查找列表中包含特定项目的所有子集?

时间:2017-07-05 07:37:05

标签: python list

我正在制作一个程序,我需要重复制作一个包含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)))

感谢您的帮助。

2 个答案:

答案 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)]