使用 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_iterable
和 filter
来制作一个迭代器,为您提供所需的结果:
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)
调用它以获得所需的结果。
我遇到这样一种情况,我得到一个嵌套列表,它很有可能是非矩形的。 例如:
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_iterable
和 filter
来制作一个迭代器,为您提供所需的结果:
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)
调用它以获得所需的结果。