使用 for 循环逐列遍历非矩形嵌套对象列表

Iterating through non-rectangular nested lists of objects column by column using for-loop

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

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

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

它可以通过转置和迭代来轻松完成,但我还没有弄清楚该怎么做。

使用 for 循环嵌套尝试以下代码

req_list =[]
for first in lists:
  for second in first:
      element = second
      req_list.append(element)
print(req_list)



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 recipes 中还有一个 roundrobin 函数,可能效率更高,因为它不需要过滤 None 值,但不够简洁。您可以使用 roundrobin(*lists) 调用它以获得所需的结果。