让我们说以下列表。
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']
答案 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']