这个双循环列表创建是如何工作的?

问题描述 投票:0回答:1

在 Python 中交错多个相同长度的列表 的最佳答案使用了一个非常令人困惑的语法来交错两个列表

l1
l2

l1 = [1,3,5,7]
l2 = [2,4,6,8]
l3 = [val for pair in zip(l1, l2) for val in pair]

不知何故你得到

l3 = [1,2,3,4,5,6,7,8]

我了解如何使用单个“

for z in y
”语句进行列表理解,并且我可以看到不知何故我们正在遍历 zip,并在其中遍历每个元组。但是,这如何将一个包含四个元组的列表变成一个包含八个元组的交错列表呢?完全被这行代码搞糊涂了

python list-comprehension interleave
1个回答
2
投票

zip
返回两个列表中的项目对,如下所示:

l_pair = [val for val in zip(l1, l2)]
print(l_pair) # [(1, 2), (3, 4), (5, 6), (7, 8)]

所以

zip
将返回一个元组列表(它实际上返回一个生成器),第一个列表中的第一个项目,第二个列表中的第二个项目。

所以对于每一对,我们添加第一项,然后添加第二项。

l = []
for pair in l_pair:
  for elem in pair:
    l.append(elem)
print(l) # [1, 2, 3, 4, 5, 6, 7, 8]
© www.soinside.com 2019 - 2024. All rights reserved.