python循環刪除列表里的元素!漏刪!


1 li = [1,2,3,4,5,6]
2 for i in li:
3     if i<3:
4         li.remove(i)
5 print(li)

 

#輸出的結果是 [2,3,4,5,6]    2沒有remove掉 是因為
#在第一次循環的時候,1 被remove掉了
#然后坑位由6個變為5個
#以后的一次往前排,2到了第一個坑位
#然后在迭代的時候,就是從第二個坑位開始迭代,就是從3開始
#所以2 就這么被忽略了!

 

 

解決:

例子一:

我是在做飛機大戰,子彈越界要刪除的時候遇到的這個問題,子彈都保存在bullet_list

可以在 函數 里面定義一個 局部變量 remove_list

在局部變量里定義是因為局部變量只有在調用的時候才有,函數調完的時候remove_list也就沒了,省的自己還要刪除

 

1         for bullet in self.bullet_list:
2             if bullet.judge():
3                 self.remove_list.append(bullet)
4         for i in self.remove_list:
5             self.bullet_list.remove(i)

這個地方在判斷的時候用.judge()方法,而不是直接對self.y<0進行判斷,也是養成對函數封裝的好習慣,盡量不要對屬性直接進行操作

 

例子二:

100個人圍成一圈,編號1-100,從1 到M 報號,報到M 的人,退出,知道一圈還剩下M-1個人, 這時候剩下幾個人,最初的號碼是多少

if __name__ == '__main__':
    people_list = list(range(1,101))
    M = int(input('請輸入M:'))
    count_num = 0
    while 1:
        remove_list = []
        for people in people_list:
            count_num += 1
            if t%M == 0:
                remove_list.append(people)
                count_num = 0
        for i in remove_list:
            people_list.remove(i)
        if len(people_list) <=  M-1 :
            for temp in people_list:
                print(temp)
            break

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM