Я преподаю Python. Я видел генератор перестановки java из строки, и я решил, что я использую версию java и сам пишу версию Python.Изучение Python - Ошибка перестановки
Вот что я писал в Python:
a = "abc"
a = list(a)
def swap(i,j):
c = a[i]
a[i] = a[j]
a[j] = c
def perm2(n):
if n == 1:
print a
else:
for i in range(len(a)):
swap(i, n-1)
perm2(n-1)
swap(i, n-1)
perm2(len(a))
Когда я запускаю это, я получаю следующее:
['b', 'c', 'a']
['c', 'b', 'a']
['c', 'a', 'b']
['c', 'a', 'b']
['a', 'c', 'b']
['a', 'b', 'c']
['b', 'a', 'c']
['a', 'b', 'c']
['a', 'c', 'b']
Теперь, выход действительно содержит все перестановки, но она также содержит дубликаты. Тем не менее, в версии java нет.
В чем причина этой проблемы?
Редактировать
Кстати, я знаю, что я мог бы исследовать и найти инструменты, чтобы сделать это для меня в одной строке, и т.д ... но моя цель состоит в том, чтобы понять причину этой проблемы, так что ответ, надеюсь, поможет мне в будущем. Основное понимание важно для меня.
Вы знаете, что вы можете использовать 'itertools. перестановки' для этого ... – Debilski
вот более питонистический своп: 'a [i], a [j] = a [j], a [i]' –
Да, но я бы l чтобы понять суть языка, а не слепо использовать уже существующие инструменты. Попытка узнать здесь, не разрабатывать программное обеспечение (пока) - спасибо, хотя я буду помнить об этом :) – Sev