如何使用Python获得一串字符的一些可能的排列?

问题描述 投票:0回答:1

我想编写一段Python代码,以便能够获得一串字符的一些可能的排列。

我举两个例子来展示我想做的事情。

示例 1:假设我有一串字符,我写为 my_list=['1','2','3','4']

我想要获得的是从左边开始配对的 3 种可能的排列,这意味着 ['1', '2', '3', '4'], ['1', '3', '2', '4'] 和 ['1', '4', '2', ' 3']

示例 2:假设我有一串字符,我写为 my_list=['1','2','3','4','5', '6']

我想要获得的是从左边开始配对的 15 种可能的排列,这意味着 ['1', '2', '3', '4', '5', '6'], ['1', '2', '3', '5', '4', '6' ], ['1', '2', '3', '6', '4', '5'], ['1', '3', '2', '4', '5', ' 6'], ['1', '3', '2', '5', '4', '6'], ['1', '3', '2', '6', '4' , '5'], ['1', '4', '2', '3', '5', '6'], ['1', '4', '2', '5', ' 3', '6'], ['1', '4', '2', '6', '3', '5'], ['1', '5', '2', '3' , '4', '6'], ['1', '5', '2', '4', '3', '6'], ['1', '5', '2', ' 6', '3', '4'], ['1', '6', '2', '3', '4', '5'], ['1', '6', '2' , '4', '3', '5'], ['1', '6', '2', '5', '3', '4']

我还想获得较长字符串的可能排列(8、10、...)。我想使用 Python,因为从左侧开始配对时,8 个字符的字符串会导致 105 种可能的排列。当然,我想要一个可以为我提供任意长度字符串的这些排列的代码。

第一个例子并不难,但第二个例子我很挣扎。对于第一个示例,我尝试使用字符对。我定义了 my_list,然后为第一对定义了另一个列表。然后,我从 my_list 中删除第一对,并通过连接第一对和 my_list 的其余部分给出结果字符串。这是第一个示例的代码:

my_list_a = ['1', '2', '3', '4']
my_list_b = ['2', '3', '4']

for i in range(1,len(my_list_b)+1):
    tmp_list=['2', '3', '4']
    c = [my_list_a[0],my_list_a[i]]
    tmp_list.remove(my_list_a[i])
    print(c+tmp_list)

我尝试将此代码改编为第二个示例,但到目前为止尚未成功。我已经看到,为了处理排列,我们可以使用 itertools,但我没有设法将它用于我的目的。

python string permutation
1个回答
0
投票

您可以使用 itertools 来实现您的目标:

from itertools import permutations

a = [0, 1, 0, 2]

for k in permutations(a[1:]):
    tmp = a[:1] # saving left part of the array
    tmp.extend(k) # appending permuted elements
    print(tmp) # final permutation

这个解决方案有意义还是我错过了?

© www.soinside.com 2019 - 2024. All rights reserved.