使用itertools遍历包含不同大小的嵌套列表的列表

时间:2020-05-13 17:57:25

标签: python iterator itertools

让我们说以下列表。

strange_list = [3, 4, 5, [6, 7, 8, [9, 0, 9], 4, 34, 'hello'], [[[['wtf']]]]]

如何使用itertools模块中的某些功能获取以下列表。

chain_strange_list = [3, 4, 5, 6, 7, 8, 9, 0, 9, 4, 34, 'hello', 'wtf']

2 个答案:

答案 0 :(得分:1)

我们可以创建一个简单的递归函数来处理此问题,而无需任何导入。

def unpack(obj):
    if not isinstance(obj, list):
        yield obj
    else:
        for item in obj:
            yield from unpack(item)

list(unpack(strange_list))
>> [3, 4, 5, 6, 7, 8, 9, 0, 9, 4, 34, 'hello', 'wtf']

请记住,这里的基本条件很简单,因为它检查迭代中的当前项目是否为列表。对于更复杂的数据类型,您必须修改此条件以适合您的需求。

答案 1 :(得分:0)

您要查找的是平整列表,您可以检查以下内容: how to extract nested lists? Flatten list of lists How to make a flat list out of list of lists?

因此,跟随他们中的一个,并感谢@Chris Charley的提示:

from more_itertools import collapse
strange_list = [3, 4, 5, [6, 7, 8, [9, 0, 9], 4, 34, 'hello'], [[[['wtf']]]]]

list(collapse(strange_list))
# [3, 4, 5, 6, 7, 8, 9, 0, 9, 4, 34, 'hello', 'wtf']