Рекурсивный генератор перестановок - PullRequest
0 голосов
/ 03 августа 2020

Как следует из названия, я пытаюсь создать рекурсивный генератор, чтобы найти каждую перестановку в заданном списке. Вот функция, которую я придумал, которая не работает:

def Permutations(l):
    if len(l) == 1:
        yield l
    else:
        for i in l:
            for j in Permutations(l[:i]+l[i+1:]):
                yield [i].extend(j)
            
l1 = [1,2,3]

for p in Permutations(l1):
    print(p)

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "idk.py", line 11, in <module>
    for p in Permutations(l1):
  File "idk.py", line 7, in Permutations
    yield [i].extend(j)
TypeError: 'NoneType' object is not iterable

1 Ответ

1 голос
/ 03 августа 2020

Было несколько проблем с вашим кодом

def Permutations(l):
    if len(l) == 1:
        yield l
    else:
        for idx, i in enumerate(l):
            for j in Permutations(l[:idx]+l[idx+1:]):
                yield [i] + j
                """ or
                lst = [i]
                lst.extend(j)
                yield lst"""
  1. Вы использовали значение i в качестве индекса для своего списка
  2. .extend ничего не возвращает , поэтому вы получали ошибку NoneType
...