python - 使用for循环逐列遍历对象的非矩形嵌套列表
问题描述
我有一种情况,我得到一个嵌套列表,它很有可能是非矩形的。例如:
lists = [[obj1,obj2,obj3],[obj4,obj5],[obj6,obj7,obj8,obj9]]
我想迭代它,使得 x = obj1,obj4,obj6,obj2,obj5,obj7,obj3,obj8,0bj9。迭代第一列的元素,然后是第二列的元素,依此类推。
通过转置和迭代它可以很容易地完成,但我还没有弄清楚如何做到这一点。
解决方案
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 配方中还有一个roundrobin
功能可能更有效,因为它不需要过滤值,但它并不那么简洁。您可以调用它以获得所需的结果。None
roundrobin(*lists)
推荐阅读
- cpu-architecture - 现代 GPU 没有什么?
- swiftui - SwiftUI Slider 的标签可见性
- java - 从 RecycleView 中删除项目
- c# - 如何从变量模板字符串中提取动态对象并再次合并?
- google-fit - 华为 Watch 2 睡眠会话不在 Google Fit Api 睡眠端点中
- ssl - 是否有特定的 Gatling 配置来避免“SSL 握手超时”异常?
- python - 如何使用批量训练的 Tensorflow 预测模型进行单次预测?
- gitlab - 为什么每次运行管道时我的 Gitlab CE 都会崩溃?
- c - (进位标志)和汇编中的系统调用(Mac Os 上的 x64 Intel 语法)之间有什么关系?
- javascript - 使用 jQuery,我尝试为具有相同类名的每个不同元素附加来自同一类的每个颜色名称