我一直在尝试创建一个脚本,其中列表的每个可能组合都将打印 [其中(1,2)和(2,1)将被计为不同的条目] 。 例如:
AsyncWork
我尝试过itertools.permutations。它将输出显示为>>> (),(1,)(2,)(1,2)(2,1)。但是,它不包括(1,1)和(2,2)
任何帮助都将非常感激。我是编码新手(我非常流利地打印“Hello World!”但是:3)
答案 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的排列感兴趣,或者您是否想为任意长排列编写函数?
答案 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)]