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