[英]Recursion with List Comprehension
我正在嘗試解決一個遞歸問題,以列出給定字符串及其長度的所有排列。 所以,我有這個解決方案
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']
誰能告訴我return語句中發生了什么? 我對列表理解部分有些困惑。
清單理解
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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.