如何在 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)]?谢谢。

这是因为在您的第二个示例中您没有 return 列表,而是附加到全局。为此,您需要以下内容:

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]