如何在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]

相关内容

  • 没有找到相关文章

最新更新