Python:递归地展平列表

Python : Recursively flatten a list

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Flatten (an irregular) list of lists in Python

我有一个列表l = [2, 9, [1, 13], 8, 6],我需要递归地展平它以得到l = [2, 9, 1, 13, 8, 6]。我找不到这样做的方法。

在写这篇文章的时候,我在相关问题的列表中找不到任何与我的疑问相匹配的问题。所以如果这是一个复制品,那么请友好地把我指向旧的问题,而不是激怒我。:)


如果要展平任意嵌套的iterables,可以尝试以下函数:

1
2
3
4
5
6
7
8
9
def flatten(x):
    try:
        it = iter(x)
    except TypeError:
        yield x
    else:
        for i in it:
            for j in flatten(i):
                yield j

例子:

1
2
3
a = [2, 9, [1, 13], 8, 6]
list(flatten(a))
# [2, 9, 1, 13, 8, 6]

请注意,函数还将把字符串展平为单个字符。