我想编写一段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,但我没有设法将它用于我的目的。
您可以使用 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
这个解决方案有意义还是我错过了?