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,))