金倩倩的美梦 发表于 2023-3-19 10:53:50

这个题为什么for循环只能遍历5次?求大神解答

letter=['A','B','C','D','D','D']
for i in letter
   if i=='D':
      letter.remove(i)
print(letter)


isdkz 发表于 2023-3-19 10:58:42

本帖最后由 isdkz 于 2023-3-19 11:01 编辑

在迭代的时候不要修改原来的迭代对象,因为使用 for 迭代的过程就是直到迭代对象的元素耗尽为止

而你在循环中使用 remove 删除原列表中的元素会使原来的迭代对象的元素更快耗尽,你可以使用一个副本来迭代

示例代码:
letter=['A','B','C','D','D','D']
for i in letter[:]:
   if i=='D':
      letter.remove(i)
print(letter)

当初约定 发表于 2023-3-19 15:53:58

其实楼主这个代码能够运行起来我都感觉有点惊讶{:10_256:}

未泯 发表于 2023-3-19 23:56:46

本帖最后由 未泯 于 2023-3-20 00:00 编辑

0 1 2 3 4 5
A B C D D D

因为第四次索引是3的时候改变了原列表,你删了个D列表变成了['A','B','C','D','D'],第五次索引是4的时候把新列表索引是3的D漏掉了

示例代码:
letter=

不二如是 发表于 2023-3-27 12:59:29

你代码中有语法错误~

for 关键字后面添加冒号(:),并在循环体前面使用缩进。以下是修正后的代码:

letter=['A','B','C','D','D','D']
for i in letter:
    if i=='D':
      letter.remove(i)
print(letter)
尽管通过对 letter 列表进行修改,该代码实现了将所有 'D' 元素从列表中删除的目标,但它采用了对正在遍历的列表进行修改的方法,这是一个不好的做法,可能会导致预期之外的行为。

更好的方式:

letter=['A','B','C','D','D','D']
new_letter=[]
for i in letter:
    if i!='D':
      new_letter.append(i)
print(new_letter)
用一个新的列表来存储删除 'D' 元素后的结果

match123_xbd 发表于 2023-4-7 13:02:53

{:5_109:}
页: [1]
查看完整版本: 这个题为什么for循环只能遍历5次?求大神解答