Рекурсия с пониманием списка
Я пытаюсь решить проблему рекурсии для перечисления всей перестановки, учитывая строку и ее длину. Итак, у меня есть это решение
def bit_str(n, s):
if n == 1:
return s
return [digit + bits for digit in bit_str(1, s) for bits in bit_str(n-1, s)]
Если вход bit_str(3, 'abc')
результат будет ['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb', 'acc', 'baa', 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']
Может ли кто-нибудь сказать мне, что происходит в ответном заявлении? Я немного запутался с частью понимания списка.
1 ответ
Решение
Понимание списка
a = [b for b in c]
эквивалентно
a=[]
for b in c :
a.append(b)
Итак, это:
a=[digit + bits for digit in bit_str(1, s) for bits in bit_str(n-1, s)]
будет так же, как
a=[]
for bits in bit_str(n-1,s):
for digit in bit_str(1,s):
a.append(digit+bits)
Демо-версия:
def bit_str(n, s):
if n == 1:
return s
return [digit + bits for digit in bit_str(1, s) for bits in bit_str(n-1, s)]
def bit_str2(n, s):
if(n==1):
return s
a=[]
for digit in bit_str2(1,s) :
for bits in bit_str2(n-1,s) :
a.append(digit+bits)
return a
print bit_str(3,'abc')
print bit_str2(3, 'abc')
Выход:
$ python p.py
['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb', 'acc', 'baa', 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']
['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb', 'acc', 'baa', 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']