这是我想要生成的数值置换-> 1,12,21,123,132,213,……987654321。我做了很多尝试,但老实说,我不知道从哪里开始。我试过使用for循环、列表和排列,但它没有起作用。所以我试过这个:
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)问题不在于如何产生置换,而在于如何管理数字的增量。
致以最诚挚的问候和感谢!
发布于 2022-10-04 15:43:59
注意,itertools.permutations返回所有相同长度的排列(由r参数控制,如果r是None,则返回可迭代的长度)。在此基础上,关键是要认识到,您实际上要寻找的是--多个排列集合的联合。
有一种方法我们可以得到它:
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,则可以添加:
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, ...]发布于 2022-10-04 15:51:42
尽量不要隐藏python关键字。你可以试试这样的方法:
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))请随意取消对打印语句的注释。
https://stackoverflow.com/questions/73950156
复制相似问题