百年bd 2022-05-04 11:58 采纳率: 50%
浏览 30
已结题

请问为啥这种连着两个是unknown的,第二个总是删不掉是咋回事儿呀?(python)

问题遇到的现象和发生背景
students = [
{'name': '张三', 'age': 18, 'score': 52, 'tel': '1388888998', 'gender': 'female'},
{'name': '李四', 'age': 28, 'score': 89, 'tel': '1388666666', 'gender': 'male'},
{'name': '王五', 'age': 21, 'score': 95, 'tel': '1365588889', 'gender': 'unknown'},
{'name': 'fuck', 'age': 20, 'score': 90, 'tel': '156666789', 'gender': 'unknown'},
{'name': 'chris', 'age': 17, 'score': 98, 'tel': '13777775523', 'gender': 'male'},
{'name': 'jack', 'age': 23, 'score': 52, 'tel': '13999999928', 'gender': 'female'},
{'name': 'tony', 'age': 15, 'score': 93, 'tel': '1388888888', 'gender': 'unknown'}]
问题相关代码,请勿粘贴截图
#删除所有性别未知的学生
for i in students:
    if i['gender'] == 'unknown':
        students.remove(i)
print(students)
运行结果及报错内容

img

我的解答思路和尝试过的方法

为啥总是有图片这种没有删掉的‘unknown’

我想要达到的结果

所有unknown的人都删掉

  • 写回答

1条回答 默认 最新

  • 请叫我问哥 新星创作者: python技术领域 2022-05-04 12:47
    关注

    因为你在遍历列表students的时候,students本身又发生了改变。比如遍历到第三个元素的时候,发现是unknown,把该元素删掉了,下一个元素的位置前移,变成了新的第三个,但循环认为第三个元素已经遍历过了,于是下一个开始遍历第四个,就把这个连着的元素跳过去了。这也是为什么建议不要在遍历列表的时候去改变列表长度的原因。
    建议遍历列表的副本(students[:])解决此问题。

    for i in students[:]:
        if i['gender'] == 'unknown':
            students.remove(i)
    print(students)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月4日