Моя первая попытка написать рекурсивную функцию, которая выводит список всех перестановок строковых символов.
Если я установлю список пустым, а затем добавлю результаты в этот список, я обнаружу, что список сбрасывается до пустого при каждом вызове функции.
Я знаю, что то, что у меня есть на данный момент, также неверно, поскольку цикл for будет прерван оператором return. Но именно здесь я застрял, как сохранить результаты, то есть каждую отдельную перестановку, без сброса списка до пустого при каждом вызове? Мне не разрешено использовать глобальные переменные, это упражнение из открытого курса MIT.
Также хотел бы знать, будет ли вообще работать мой метод? не уверен, что то, как я нарезал струну, сработает.
Может ли кто-нибудь пролить свет на то, как я могу составить список всех перестановок внутри функции? и если мой метод вообще имеет шанс работать?
def get_permutations(sequence):
if len(sequence) == 1:
return sequence
else:
return (sequence[i] + get_permutations(sequence[0:i-1] + sequence[i +
1 : len(sequence)]) for i in range(len(sequence)))
Теперь выход
<generator object get_permutations.<locals>.<genexpr> at 0x102b3b9d0>
global
, и для этого нет никаких причин. Ничто в приведенном выше коде не очищает список. В базовом случае действительно есть проблема - вместо того, чтобы возвращать сам список, он должен возвращать список, содержащий список (т.е.[sequence]
, а неsequence
), поскольку возвращаемое значение должно быть списком списков! 18.09.2020()
вместо[]
в этом последнем операторе возврата. 18.09.2020