使用递归列表的排列[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

所以一直在努力解决这个问题,我很接近,终于找到了一种方法,可以在生成列表中重复输出某些需要的输出。

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并且真的希望我不需要循环但是使用理解递归调用给我相同的结果...任何帮助或指针赞赏。不是只想要了解我想要了解的重做......

python recursion permutation
2个回答
0
投票

使用它,您将获得所需的输出:

from itertools import permutations

inp = ['a', 'r', 't']

list(permutations(inp, 3))

日期:

[('a', 'r', 't'),
 ('a', 't', 'r'),
 ('r', 'a', 't'),
 ('r', 't', 'a'),
 ('t', 'a', 'r'),
 ('t', 'r', 'a')]

结果是元组列表,但如果需要,可以将它们转换为列表。


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']]

注意:您缺少其他声明

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