如何使用嵌套列表推导式改写处理嵌套对象列表的Python循环代码?
用嵌套列表推导式替代双层循环生成目标列表
没问题!完全可以用嵌套列表推导式来实现这个需求,而且它的逻辑和你写的双层循环是一一对应的,写法还更简洁~
先回顾下你原来的双层循环逻辑:遍历mylist里的每个MyClassA对象,再遍历每个对象的attrA2列表里的MyClassB对象,最后把MyClassA的attrA1和MyClassB的attrB组成小列表,添加到结果里。
对应的嵌套列表推导式写法如下:
attrBlist = [[i.attrA1, j.attrB] for i in mylist for j in i.attrA2]
拆解一下这个推导式:
- 最前面的
[i.attrA1, j.attrB]:就是你每次append到结果里的元素,对应循环里的attrBlist.append([i.attrA1,j.attrB]) - 中间的
for i in mylist:对应外层循环,遍历所有MyClassA对象 - 最后的
for j in i.attrA2:对应内层循环,遍历当前MyClassA对象的attrA2列表里的MyClassB对象
运行这段代码后,输出结果和你原来的循环完全一致:
[[1, 10], [1, 100], [2, 20], [2, 200], [3, 30], [3, 300]]
这种写法既精简了代码行数,又保留了清晰的逻辑,非常适合处理这种多层遍历生成列表的场景,初学者多练几次就能熟练掌握啦~
内容的提问来源于stack exchange,提问作者Stef1611
相关产品推荐
相关产品推荐

