展平任意深度的嵌套列表

时间:2019-07-02 16:04:15

标签: python list nested-lists

我想从Python中的n个嵌套列表中检索数据。那就是:

[[[[[1, 2]]]]] => [1, 2]

我显然可以做类似的事情:

mylist[0][0][0][0]

但是我想知道是否有一种方法可以不必知道列表嵌套的深度。

我想这样做是因为我从需要处理的REST API请求中获得了一些格式错误的数据。

1 个答案:

答案 0 :(得分:2)

您可以使用递归生成器从嵌套列表中产生元素:

from typing import Collection

def check_nested(obj):
    for sub_obj in obj:
        # tuples, lists, dicts, and sets are all Collections
        if isinstance(sub_obj, Collection):
            yield from check_nested(sub_obj)
        else:
            yield sub_obj


l = [[[[[1, 2]]]]]
list(check_nested(l))
[1, 2]

# This will work for other formats
l = [[[[[1, 2]]]], [[3, 4]]]

list(check_nested(l))
[1, 2, 3, 4]