我要为以下列表[1,2,3,4]
我知道我可以设置一个for循环并将for循环索引作为参数传递,但是我试图使以下代码起作用:
import itertools
nums = [1,2,3,4]
perms = itertools.permutations(nums,range(1,4))
print(list(perms))
希望参数range(1,4)
可以在字符串长度1、2、3和4上运行intertools.permutations(nums)。
有什么想法可以使用itertools表示法吗?
也可以将length = 1的情况打印为:
(1), (2), (3), (4)
不
(1,), (2,), (3,), (4,)
答案 0 :(得分:2)
将permutations
的4个呼叫连在一起:
from itertools import chain, permutations
nums = [1,2,3,4]
perms = list(chain.from_iterable(permutations(nums, i) for i in range(1,5)))
print(perms)
如果要将1元组打印为单个值,则需要单独处理:
for t in perms:
if len(t) == 1:
print("(t[0])")
else:
print(t)
那是如果您担心元组的外观。如果您确实想要一个非元组值,则需要分别提取该值,并记住1
和(1)
是 exact 相同的值。 / p>
perms = list(nums, # permutations(nums, 1) == nums
chain.from_iterable(permutations(nums, i) for i in range(2,5)))
答案 1 :(得分:1)
您也可以将其写为生成器表达式:
perms = (it for i in range(1, 4) for it in itertools.permutations(nums,i))