在itertools.permutations中将范围设置为参数

时间:2019-05-20 17:19:12

标签: python

我要为以下列表[1,2,3,4]

打印长度为1-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,)

2 个答案:

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