标签:python python-3-x list for-loop indexing
我发现这段代码非常有趣.
a = [0, 1, 2, 3]
for a[-1] in a:
print(a)
输出如下:
[0, 1, 2, 0]
[0, 1, 2, 1]
[0, 1, 2, 2]
[0, 1, 2, 2]
我试图理解为什么python会这样做.是因为python试图重用索引吗? for循环以某种方式切片列表?
我们可以在迭代列表时添加或删除元素,但是当我们尝试使用索引访问变量时,它会产生奇怪的输出.
有人可以帮我理解列表中for循环和索引之间的交互吗?或者只是解释这个输出?
解决方法:
它按预期工作. (对于“预期”的一些解释,至少.)
将代码重写为此代码,以防止在任何时候误解[-1]:
a = [a for a in range(0,4)]
for b in a:
print (b)
a[-1] = b
print (a)
告诉我们
0
[0, 1, 2, 0]
1
[0, 1, 2, 1]
2
[0, 1, 2, 2]
2
[0, 1, 2, 2]
这清楚地说明了对[-1]的b赋值是立即完成的,在迭代时改变了列表.
四个循环执行以下操作:
> a [-1]设置为列表的第一个值,0.结果现在为[0,1,2,0].
> a [-1]设置为第二个值,1.结果(很明显)[0,1,2,1].
> a [-1]设置为2,因此结果为[0,1,2,2] – 再次,只有[-1]被更改.
>最后,将[-1]设置为a中的最后一个值,因此它实际上不会改变,最终结果为[0,1,2,2].
标签:python,python-3-x,list,for-loop,indexing 来源: https://codeday.me/bug/20191007/1869342.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。