首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何产生这个排列?

如何产生这个排列?
EN

Stack Overflow用户
提问于 2022-10-04 15:23:55
回答 2查看 60关注 0票数 0

这是我想要生成的数值置换-> 1,12,21,123,132,213,……987654321。我做了很多尝试,但老实说,我不知道从哪里开始。我试过使用for循环、列表和排列,但它没有起作用。所以我试过这个:

代码语言:javascript
运行
复制
from itertools import permutations
list = [1,2,3,4,5,6,7,8,9]
for x in list:
    permutations(list,x)
    list2 = list(permutations(list))
    print(list2)

问题不在于如何产生置换,而在于如何管理数字的增量。

致以最诚挚的问候和感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-04 15:43:59

注意,itertools.permutations返回所有相同长度的排列(由r参数控制,如果rNone,则返回可迭代的长度)。在此基础上,关键是要认识到,您实际上要寻找的是--多个排列集合的联合。

有一种方法我们可以得到它:

代码语言:javascript
运行
复制
from itertools import permutations
digits = [1,2,3,4,5,6,7,8,9]
result = []
for result_size in range(1, len(digits) + 1):
    digits_slice = digits[:result_size]
    result.extend(permutations(digits_slice))
print(result)
# [(1,), (1, 2), (2, 1), (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1), (1, 2, 3, 4), (1, 2, 4, 3), ...]

注意:您不应该使用list作为变量名,因为它影影内建list类型。为了避免这个问题,我将list重命名为digits

如果希望result列表中的项是ints而不是tuples,则可以添加:

代码语言:javascript
运行
复制
result = [int(''.join(str(i) for i in tup)) for tup in result]
print(result)
# [1, 12, 21, 123, 132, 213, 231, 312, 321, 1234, 1243, ...]
票数 0
EN

Stack Overflow用户

发布于 2022-10-04 15:51:42

尽量不要隐藏python关键字。你可以试试这样的方法:

代码语言:javascript
运行
复制
from itertools import permutations
lst = [str(i) for i in range(10)]

for i in range(1,len(lst)+1):
    sub_list = lst[0:i]
    g = ("".join(perm) for perm in permutations(sub_list))
    # print(list(g))

请随意取消对打印语句的注释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73950156

复制
相关文章

相似问题

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