请问为啥这种连着两个是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的人都删掉

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

for i in students[:]:
    if i['gender'] == 'unknown':
        students.remove(i)
print(students)