首页 > 解决方案 > 使用 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']

标签: pythoniteratoritertools

解决方案


我们可以制作一个简单的递归函数来处理这个问题,而不需要任何导入。

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']

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


推荐阅读