簡體   English   中英

如何在 Python 中擴展列表理解?

[英]How to expand list comprehension in Python?

我知道在列表理解的正常格式中,如[i for j in k for i in j]這基本上可以擴展為:

empty_list = []    
for j in k:
    for i in j:
        empty_list.append(i)

但是,我在遞歸函數中遇到了一個問題,例如使用遞歸展平嵌套列表:

def flatten(l:List):
    if isinstance(l, list):
        return [i for j in l for i in flatten(j)]
    else: return [l]

如果我只是擴展這個列表理解, flatten(j) 將在 NoneType 中:

for j in l:
    for i in flatten(j):
        empty_list.append(i)

這將用完,因為'NoneType' object is not iterable.

如何以適當的方式擴展[i for j in l for i in flatten(j)] 謝謝。

這是因為在您的第二個示例中,您沒有返回列表,而是附加到了一個全局變量。 為此,您需要以下內容:

def flatten(l):
    if isinstance(l, list):
        empty_list = []
        for j in l:
            for i in flatten(j):
                empty_list.append(i)
        return empty_list
    else:
        return [l]

實際上,我不會使用任何一種方法。 您正在創建一堆昂貴的丟棄容器。 相反,我會使用生成器方法:

def flatten(l):
    if isinstance(l, list):
        for j in l:
            yield from flatten(j)
    else:
        yield l

data = [1, [2, [3]]]
print(list(flatten(data)))
[1, 2, 3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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