首页 > 解决方案 > 使用for循环逐列遍历对象的非矩形嵌套列表

问题描述

我有一种情况,我得到一个嵌套列表,它很有可能是非矩形的。例如:

lists = [[obj1,obj2,obj3],[obj4,obj5],[obj6,obj7,obj8,obj9]]

我想迭代它,使得 x = obj1,obj4,obj6,obj2,obj5,obj7,obj3,obj8,0bj9。迭代第一列的元素,然后是第二列的元素,依此类推。

通过转置和迭代它可以很容易地完成,但我还没有弄清楚如何做到这一点。

标签: pythonfor-loopnested-listsiterable

解决方案


Itertools 对此非常方便。您可以组合并制作一个迭代器,为您提供所需的结果:zip_longest chain.from_iterablefilter

from itertools import zip_longest, chain

lists = [['obj1','obj2','obj3'],['obj4','obj5'],['obj6','obj7','obj8','obj9']]

it = filter(None, chain.from_iterable(zip_longest(*lists)))
list(it)
# ['obj1', 'obj4', 'obj6', 'obj2', 'obj5', 'obj7', 'obj3', 'obj8', 'obj9']

itertools 配方中还有一个roundrobin功能可能更有效,因为它不需要过滤值,但它并不那么简洁。您可以调用它以获得所需的结果。Noneroundrobin(*lists)


推荐阅读