Python中,为什么说for是一种遍历列表的有效方式,但是不建议在for循环中修改列表,否则将导致python难以跟踪其中的元素
直接上代码演示。对这个list进行操作。a = [1, 2, 3, 4, 5, 6]
首先,将里面值为3的元素修改为4。我们可以写成这样。
for i in range(len(a)):
if a[i] == 3:
a[i] = 4或者这样for i, v in enumerate(a):
if v == 3:
a[i] = 4
结果变成了这样:
a = [1, 2, 4, 4, 5]
好像用for循环完成得挺顺利的,但是列表的修改,不仅限于对值得修改,还有插入和删除。接着上一步,我们现在要尝试删除里面所有值为4的元素。
for i, v in enumerate(a):
if v == 4:
del a[i]
然而,得到却是
a = [1, 2, 4, 5]
如果写成这样
for i in range(len(a)):
if a[i] == 4:
del a[i]
python直接就报错了
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range
由于在遍历的过程中,删除了其中一个元素,导致后面的元素整体前移,导致有个元素成了漏网之鱼。同样的,在遍历过程中,使用插入操作,也会导致类似的错误。这也就是问题里说的无法“跟踪”元素。如果使用while,则可以在面对这样情况的时候灵活应对。同样是上面那个例子。
i = 0
while i < len(a):
if a[i] == 4:
del a[i]
else:
i += 1
----------------------------------------------------------------------for循环还是很好用的,但是涉及到列表的插入删除,还是不要用了。
1 条评论
《吓到笑》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/162064.html