Python在遍歷列表的同時移除元素

2021-09-25 09:48:00 字數 1227 閱讀 4610

之前遇到的問題 ,找到了這個解決辦法

錯誤的做法1:

n = [1,2,3,4,5,6,7,8,9,10]

for x in n:

n.remove(x)

print(n)

執行結果:

[2, 4, 6, 8, 10]

原因很簡單,for會去獲取列表的迭代器,每次迴圈時按次序獲取內容,這次取n下次迴圈就取n+1,但是迴圈體中對列表做remove操作,導致每次迴圈列表中的元素都會前移一位,也就是n+1變為了n,而n+2變為了n+1。

錯誤的做法2:

n = [1,2,3,4,5,6,7,8,9,10]

for x in range(len(n)):

m = n[x]

n.remove(m)

print(n)

執行結果:

traceback (most recent call last):

file 「d:/mytest.py」, line 3, in

m = n[x]

indexerror: list index out of range

原因也很簡單,n中元素越來越少而x的數字卻越來越大,此消彼長當迴圈進行到一半的時候,就會出現陣列下標越界的。

正確的做法1:

n = [1,2,3,4,5,6,7,8,9,10]

for x in n[:]:

n.remove(x)

print(n)

執行結果:

**中遍歷的是n列表的複製品,從複製品中依次取出每乙個元素,將n中對應的內容刪除掉。

正確的做法2:

n = [1,2,3,4,5,6,7,8,9,10]

for x in range(len(n)):

m = n[0]

n.remove(m)

print(n)

執行結果:

無論迴圈進行到哪一步,永遠只刪除當前列表的第乙個元素,不使用不斷增加的迴圈變數就不會出現陣列下標越界了。

實際案例,通過兩個質因數列表,計算最大公約數:

m = [2,3,3,3] # 54

n = [2,2,3] #12

result = 1

for x in m[:]:

if x in n:

result *= x

m.remove(x)

n.remove(x)

print(result)

或者:

Python 同時遍歷兩個列表

list1 name age job list2 jim 35,test coder for i,j in zip list1,list2 print i,j name jim age 35 job test coderzip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後...

python 同時遍歷 python中的並行遍歷

其實並行遍歷是啥意思?就是將二維陣列中的值同時取出來 例如有乙個二維陣列 1,2,3 4,5,6 我想成對取出來,其中的元素,結果就是 1,4 2,5 3,6 這種模式就需要下面的並行遍歷方法。1 並行遍歷 zip和map 內建的zip函式可以讓我們使用for迴圈來並行使用多個序列。在基本運算中,z...

Python 遍歷列表

假定有乙個列表的列表,內層列表的每個值都是包含乙個字元的字串,像這樣 grid o o o o o o o o o o o o o o o o o o o o o o o o o o o 你可以認為grid x y 是一幅 圖 在x y 座標處的字元,該圖由文字字元組 成。原點 0,0 在左上角,向...