Python双层循环列表推导式如何实现列表交错?
拆解交错列表的列表推导式
咱们把这段代码拆成几步,就能彻底搞懂它的逻辑:
先看
zip(l1, l2)的作用
它会把两个列表对应位置的元素打包成元组,对示例里的l1和l2来说,zip(l1, l2)迭代后会依次产出:(1,2)、(3,4)、(5,6)、(7,8)这四个元组。把列表推导式转换成普通循环
你觉得困惑的列表推导式,本质就是两层嵌套的for循环,把它展开成普通写法就一目了然:l1 = [1,3,5,7] l2 = [2,4,6,8] l3 = [] # 外层循环:逐个取出zip生成的元组 for pair in zip(l1, l2): # 内层循环:遍历当前元组里的每个元素 for val in pair: l3.append(val)运行这段代码,l3的结果和原推导式完全一致。
再回头看列表推导式的逻辑
原推导式[val for pair in zip(l1, l2) for val in pair]只是把嵌套循环写成了紧凑的一行:- 先执行外层循环
for pair in zip(l1, l2),拿到每个元组 - 再对每个元组执行内层循环
for val in pair,逐个取出元组里的元素 - 最后把所有取出的
val按顺序收集成新列表
- 先执行外层循环
这样一步步走下来,四个元组就被逐个拆解,元素按顺序拼接成了八个元素的交错列表。
内容的提问来源于stack exchange,提问作者merrrcury
相关产品推荐
相关产品推荐

