Python 使用itertools在具有不同大小的嵌套列表组合的列表上迭代

Python 使用itertools在具有不同大小的嵌套列表组合的列表上迭代,python,iterator,itertools,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'] 我们可以制作一个简单的递归函数来处理这个问题,而不需要任何导入 def unpack(obj): if not i

假设我有以下列表

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

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

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

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

您需要的是列表的扁平化,您可以选中这些:

因此,请关注其中一个并感谢@Chris Charley提供的提示:

来自更多工具导入崩溃
奇怪的列表=[3,4,5,6,7,8,9,0,9,4,34,'你好',[['wtf']]]]
列表(折叠(奇怪的列表))
#[3,4,5,6,7,8,9,0,9,4,34,‘你好’,‘wtf’]

这是否回答了您的问题?请参阅更多工具中的内容。这可能有助于我使用
flatte=lambda*n:(e表示in中的a,n表示in中的e(flatte(*a),如果是实例(a,(元组,列表)),则使用其他(a,))