生成列表中所有可能的元素组合

时间:2017-08-30 15:30:47

标签: python list tuples combinations itertools

我一直在尝试创建一个脚本,其中列表的每个可能组合都将打印 [其中(1,2)和(2,1)将被计为不同的条目] 。 例如:

AsyncWork

我尝试过itertools.permutations。它将输出显示为>>> (),(1,)(2,)(1,2)(2,1)。但是,它不包括(1,1)和(2,2)

任何帮助都将非常感激。我是编码新手(我非常流利地打印“Hello World!”但是:3)

4 个答案:

答案 0 :(得分:4)

尝试itertools.product

def foo(l):
    yield from itertools.product(l)
    yield from itertools.product(l, l)
for x in foo([1, 2]):
     print(x)

(1,)
(2,)
(1, 1)
(1, 2)
(2, 1)
(2, 2)

请注意,yield from语法可从python3.3开始提供。

答案 1 :(得分:1)

适合我:

c = [1,2]
for i in itertools.permutations(c):
     print i

产量

(1, 2)
(2, 1)

答案 2 :(得分:1)

可能有一些内置(或更可能是numpy)的软件包可以为你做这个,但这是一个很好的练习,你自己做。

一个问题 - 您是否只对长度为2的排列感兴趣,或者您是否想为任意长排列编写函数?

另请参阅:How to generate all permutations of a list in Python

答案 3 :(得分:0)

与替换组合,然后置换结果,只保留独特的结果。

import itertools as it 


combs = it.chain.from_iterable(it.combinations_with_replacement(c, i) for i in range(1,3))
perms = it.chain.from_iterable([set(it.permutations(i)) for i in combs])
list(perms)
# [(1,), (2,), (1, 1), (1, 2), (2, 1), (2, 2)]