美文网首页
001:循环遍历删除容易掉的两个坑

001:循环遍历删除容易掉的两个坑

作者: yydafx | 来源:发表于2019-11-11 19:47 被阅读0次

题目:scores = [34, 78, 56, 55, 46, 89, 43, 34, 56, 78]

删除列表里小于60的数



常规做法:日常掉坑1
for score in scores:
    if score < 60:
        scores.remove(score)
print(scores)  # [78, 55, 89, 34, 78]

掉坑分析:因为删除元素,导致遍历不完全导致的删除不干净
'''
代码分析:
           scores = [34, 78, 56, 55, 46, 89, 43, 34, 56, 78]
0 score = 34; 34<60 --> scores = [78, 56, 55, 46, 89, 43, 34, 56, 78]
1 score = 56; 56<60 --> scores = [78, 55, 46, 89, 43, 34, 56, 78]
2 score = 46; 46<60 --> scores = [78, 55, 89, 43, 34, 56, 78]
3 score = 43; 43<60 --> scores = [78, 55, 89, 34, 56, 78]
4 score = 56; 56<60 --> scores = [78, 55, 89, 34, 78]
5 循环结束

综上分析:
  遍历不到的数字有:78, 55,89, 34,78
'''

解题思路:保证遍历取值能够能够取完所有的值

正确代码:

scores = [34, 78, 56, 46, 89, 43, 34, 56, 78]
for score in scores[:]:
    if score < 60:
        scores.remove(score)
print(scores)   # [78, 89, 78]


常规做法:日常掉坑2
scores = [34, 78, 56, 46, 89, 43, 34, 56, 78]
length = len(scores)
for index in range(length):
    print(scores[index])
    if scores[index] < 60:
        del scores[index]
print(scores)

掉坑分析:

  • 因为是遍历下标,在删除元素时会导致下标越界而报错;
  • 同时也会因为删除元素,而导致遍历不完全;
    '''
    代码分析:
                   scores=[34, 78, 56, 46, 89, 43, 34, 56, 78]
    length=len(scores) = 9
    index=0 34<60 del scores[0]; scores=[78, 56, 46, 89, 43, 34, 56, 78]
    index=1 56<60 del scores[1]; scores=[78, 46, 89, 43, 34, 56, 78]
    index=2 89>60         scores=[78, 46, 89, 43, 34, 56, 78]
    index=3 43>60 del scores[3]; scores=[78, 46, 89, 34, 56, 78]
    index=4 56>60 del scores[4]; scores=[78, 46, 89, 34, 78]
    index=5 报错(索引下标越界):IndexError: list index out of range

综上分析:
遍历不到的数字:78, 46,34,78
'''

解题思路:注意索引值的变化

正确代码:

scores = [34, 78, 56, 46, 89, 43, 34, 56, 78]
index = 0
while index < len(scores):
    if scores[index] < 60:
        del scores[index]
        continue    # 当遇到的值小于60时会被删除,我们直接停止本次循环,不让索引增加
        # index -= 1    # 当遇到的值小于60时会被删除,我们先在本次循环让索引减1,外面在加1,索引不变
    index += 1
print(scores)

相关文章

  • 001:循环遍历删除容易掉的两个坑

    题目:scores = [34, 78, 56, 55, 46, 89, 43, 34, 56, 78] 删除列表...

  • Python:For循环遍历列表list的坑

    前几天写了个小脚本,for循环遍历列表,但是在遍历期间对数组进行了删除元素的操作,给自己挖了坑For循环遍历时实际...

  • js 数组遍历时删除元素

    参考js在循环遍历数组中删除指定元素踩坑( foreach.. for.. for..in.. )[https:/...

  • js 数组操作

    遍历删除元素: 遍历数组:for循环遍历: forEach遍历:

  • Java删除List中的元素

    for循环遍历删除 使用for遍历删除的问题在于删除某元素后,List的大小变化了,会导致遍历时漏掉某些元素,例如...

  • Unity正确删除子物体的方式

    删除一个物体的子物体,简单啊,循环遍历啊 上代码 运行! 诶?怎么还剩下两个? 因为,在循环运行当中,每当删除一个...

  • ios数组

    //枚举遍历和for循环遍历可以在遍历的同时删除里面的元素,但用for in会出现数组越界异常,要想用for in...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • for in 循环遍历之坑

    问题描述:最近在做项目时,用for..in对元素进行遍历竟然多循环了一次,这让我百思不得其解,最后通过找资料,知道...

  • 2019-06-26 for循环删除元素

    for循环删除元素,有三种方法 1, 如果是从小到大遍历,即i++, 容易漏掉元素。解决办法是每删除一个元素,就执...

网友评论

      本文标题:001:循环遍历删除容易掉的两个坑

      本文链接:https://www.haomeiwen.com/subject/bjhxictx.html