首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在itertools.permutations中将范围设置为参数

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

Stack Overflow用户
提问于 2019-05-21 01:19:12
回答 2查看 264关注 0票数 0

我想打印以下列表[1,2,3,4]的所有长度为1-4的排列

我知道我可以设置一个for循环并将for循环索引作为参数传入,但我试图让以下代码正常工作:

代码语言:javascript
复制
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)。

如果可以使用itertools符号来实现这一点,您有什么想法吗?

是否还可以将长度=1的大小写打印为:(1), (2), (3), (4)而不是(1,), (2,), (3,), (4,)

EN

回答 2

Stack Overflow用户

发布于 2019-05-21 01:22:43

将4个permutations调用链接在一起

代码语言:javascript
复制
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-tuple打印成单独的值,你需要单独处理:

代码语言:javascript
复制
for t in perms:
    if len(t) == 1:
        print("(t[0])")
    else:
        print(t)

这是如果您关心元组的外观的话。如果您确实想要一个非元组的值,则需要单独提取该值,并记住1(1)是完全相同的值。

代码语言:javascript
复制
perms = list(nums,  # permutations(nums, 1) == nums
             chain.from_iterable(permutations(nums, i) for i in range(2,5)))
票数 2
EN

Stack Overflow用户

发布于 2019-05-21 01:27:17

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

代码语言:javascript
复制
perms = (it for i in range(1, 4) for it in itertools.permutations(nums,i))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56225513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档