Python學習筆記 2 4 list迴圈

2022-09-02 11:30:09 字數 949 閱讀 2089

首先舉個例子:

l=[1,1,1,2,3,4,5]

for i in l:

if i%2!=0:  #把list中的奇數刪除

l.remove(i)

print(l)  #但是執行結果是[1, 2, 4],有奇數沒被刪掉。

#所以可以看出,迴圈刪list的時候會導致下標錯位,結果是不對的。

原因:l=[1,1,1,2,3,4,5]

#0 1 2 3 4 5 6  (這裡是對應的下標。)list根據下標取值操作。

#1,1,2,3,4,5 第乙個下標是0,1/2的餘數不是0,所以第乙個1刪掉,然後執行下標為1的,

# 但是此時原0位已經刪掉看,後面順序進製。第二個1的下標變成0,就被越過了。

解決方法:

l=[1,1,1,2,3,4,5]

l2=[1,1,1,2,3,4,5] #這樣定義的兩個id位址是不一樣的。

for i in l2:  #迴圈l2,但是刪的時候刪l的內容。l2沒改變過,所以下標也不會錯位,所以刪的l是顯示正確的。

if i%2!=0:

l.remove(i)

print(l)

#list刪除有兩種:remove刪除的是元素,pop刪除的是下標

另一種,如果直接l2=l,這樣執行結果也是[1, 2, 4]

l=[1,1,1,2,3,4,5]

l2=l  #淺拷貝

print(id(l))

print(id(l2)) #l2=l這樣賦值是淺拷貝,列印出來的id位址是一樣的

l2=copy.deepcopy(l) #這樣賦值是深拷貝,列印出來的id位址是不一樣的。相當於在記憶體中重新開闢了乙個地方儲存。

l2=l.copy() #淺拷貝

#淺拷貝id位址是一樣的,所以list刪除都是錯誤的。深拷貝id位址不同,list刪除是迴圈乙個,刪另乙個。這樣比較亂,所以list不要用迴圈刪除。

Python學習筆記 2 4章 遞迴函式

這是學習廖雪峰老師python教程的學習筆記 在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。使用遞迴函式寫乙個階乘函式 def fact n if n 1 return 1 return n fact n 1 計算過程 fact 5 5 fact 4 5 4 f...

C 學習筆記 24

volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。由於訪問暫存器的速度要快過ram,所以編譯器一般都會作減少訪問外部ram的優化。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的...

學習進度筆記24

今天完成了老師布置的tensorflow實驗4 實驗目的 1.掌握使用 tensorflow 進行knn 操作2.掌握 knn 演算法的原理 實驗原理 knn的基本原理 knn是通過計算不同特徵值之間的距離進行分類。整體的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大...