列表理解中的两个 for 循环在 Python 中产生奇怪的输出
Two for loops in list comprehension produce weird output in Python
我写过这段代码:
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
print([x**2 for x in l1 for y in l2])
输出这个:
[1, 1, 1, 1, 4, 4, 4, 4, 9, 9, 9, 9, 16, 16, 16, 16]
我的问题是,这个列表理解中发生了什么?为什么 l1
中的项目数量乘以 l2
的长度?
就像你一样:
for x in l1:
for y in l2: #this loop has len(l2) iteration
print(x**2)
在 y
循环中,您只使用变量 x
,它在 len(l2)
次迭代中不会改变。
您的列表推导等同于以下 for
循环:
result = []
for y in l2:
for x in l1:
result.append(x**2)
从这里你可以看出为什么内循环重复了4次。
如果您想并行遍历两个列表,而不是嵌套,请使用 zip()
:
[x**2 for x, y in zip(l1, l2)]
这里发生了两件事。
第一个:print([x**2 for x in l1...
这是对 l1 中的每个元素进行平方运算得到 [1, 4, 9, 16]
第二个:... for y in l2])
这是对 l2 中的每个值重复此过程(对 l1 中的元素求平方并打印)一次,这就是为什么每个平方值得到 4 个的原因。
我写过这段代码:
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
print([x**2 for x in l1 for y in l2])
输出这个:
[1, 1, 1, 1, 4, 4, 4, 4, 9, 9, 9, 9, 16, 16, 16, 16]
我的问题是,这个列表理解中发生了什么?为什么 l1
中的项目数量乘以 l2
的长度?
就像你一样:
for x in l1:
for y in l2: #this loop has len(l2) iteration
print(x**2)
在 y
循环中,您只使用变量 x
,它在 len(l2)
次迭代中不会改变。
您的列表推导等同于以下 for
循环:
result = []
for y in l2:
for x in l1:
result.append(x**2)
从这里你可以看出为什么内循环重复了4次。
如果您想并行遍历两个列表,而不是嵌套,请使用 zip()
:
[x**2 for x, y in zip(l1, l2)]
这里发生了两件事。
第一个:print([x**2 for x in l1...
这是对 l1 中的每个元素进行平方运算得到 [1, 4, 9, 16]
第二个:... for y in l2])
这是对 l2 中的每个值重复此过程(对 l1 中的元素求平方并打印)一次,这就是为什么每个平方值得到 4 个的原因。