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

2024-10-02 16:27:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为下面的列表打印长度为1-4的所有排列[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符号来实现这一点,有什么想法吗

是否也可以将长度为1的案例打印为: (1), (2), (3), (4) 不是 (1,), (2,), (3,), (4,)


Tags: 字符串代码import列表for参数符号range
2条回答

也可以将其编写为生成器表达式:

perms = (it for i in range(1, 4) for it in itertools.permutations(nums,i))

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)是完全相同的值

perms = list(nums,  # permutations(nums, 1) == nums
             chain.from_iterable(permutations(nums, i) for i in range(2,5)))

相关问题 更多 >