Python列表推导式两层for循环输出结果异常原因咨询
列表推导式执行逻辑说明
你给出的多循环列表推导式,循环顺序和普通嵌套for循环完全一致:越靠左的循环层级越靠外,你写的代码:
[x**2 for x in l1 for y in l2]
完全等价于下面的常规嵌套循环代码:
result = [] # 最左侧的for x in l1 是外层循环 for x in l1: # 靠右的for y in l2 是内层循环 for y in l2: result.append(x**2)
具体执行过程
- 外层循环第一次取
x = 1,进入内层循环遍历l2的4个元素,每遍历一次就把1**2 = 1加入结果列表,第一轮结束后结果前4位是[1, 1, 1, 1] - 外层循环第二次取
x = 2,内层循环再次遍历4次,加入4个2**2 = 4,结果接下来4位是[4,4,4,4] - 后续
x=3、x=4时重复上述逻辑,分别加入4个9、4个16,最终得到你看到的输出结果。
列表长度的计算逻辑
嵌套循环的总执行次数 = 外层循环次数 * 内层循环次数:
- 外层循环总次数等于l1的长度:4次
- 每执行一次外层循环,内层循环就要完整执行一轮,次数等于l2的长度:4次
- 总执行次数为
4*4=16次,每次执行都会往列表中追加1个元素,因此最终列表长度等于两个列表长度的乘积。
注:你的代码里并没有用到内层循环的
y变量,所以才会出现同一个x的平方重复多次的情况,如果你的需求是两个列表元素一一对应运算,应该用zip函数配对两个列表的元素,而不是嵌套循环。
内容的提问来源于stack exchange,提问作者Oleksandr Novik
相关产品推荐
相关产品推荐

