因此,我一直在为此苦苦挣扎,我终于找到了一种方法,现在可以在生成的列表中重复进行某些期望的输出了。
input['a','r','t']
def permutations(string_list):
if len(string_list) <= 1:
return [string_list]
perm_list = []
for letter_index in range(len(string_list)):
perms_1 = string_list[letter_index]
rest = string_list[:letter_index] + string_list[letter_index + 1:]
for perms_2 in permutations(rest):
perm_list.append([perms_1] + perms_2)
return perm_list
输出
[[['a', 'r', 't'], ['a', 't', 'r'], ['r', 'a', 't'], ['r', 't', 'a'],
['t', 'a', 'r'], ['t', 'r', 'a']], [['a', 'r', 't'], ['a', 't', 'r'],
['r', 'a', 't'],
.........repeats.......repeats..
..for quite sometime but not infinite....]]]
期望的输出
[['a', 'r', 't'], ['a', 't', 'r'], ['r', 'a', 't'], ['r', 't', 'a'],
['t', 'a', 'r'], ['t', 'r', 'a']]
所以它是置换,但令我烦恼的是必须使用字符串列表并输出字符串列表。如果我只是使用字符串“ art”作为输入或使用列表输出[“ art”,“ atr”,“ rat”等),那么我已经重做了多次,并且有了递归排列的基础。确定我要去哪里错了。不允许导入itertools,并且真的希望我不需要循环,但是使用理解递归调用会给我相同的结果...感谢任何帮助或指针。不只是想要我想了解的重做。...
答案 0 :(得分:0)
使用它,您将获得所需的输出:
String text = controller.text;
text = text.trim();
出局:
from itertools import permutations
inp = ['a', 'r', 't']
list(permutations(inp, 3))
结果是一个元组列表,但是您可以根据需要将它们转换为列表。
答案 1 :(得分:0)
def permute(input, l, r, arr = []):
if l == r:
arr.append(input)
else:
for i in range(l, r + 1):
input[l], input[i] = input[i], input[l]
permute(input, l + 1, r, arr)
input[l], input[i] = input[i], input[l]
return arr
input = ['a','r','t']
n = len(input)
print (permute(input, 0, n - 1))
结果:
[[['a','r','t'],['a','r','t'],['a','r','t'],['a' ,'r','t'],['a','r','t'],['a','r','t']]
注意:您缺少 else 声明