簡體   English   中英

列表理解遞歸

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM