python中對列表進行修改時的問題

2021-08-24 23:45:30 字數 994 閱讀 9882

a = [0,1,1,2,2,3]

for i in

a: if i == 1:

a.remove(i)

print(a)

a = [i for i in

aif i != 1]

其實歸根到底python還是不想讓你在對原來列表進行修改時採取for…in…這個模式,因為不知覺的你就掉坑了,因此如果要修改,請用while,如果非得用remove,那麼就得用copy模組產生乙個副本輔助進行。如下:

a = [0,1,1,2,2,3]

i = 0

while i < len(a):

ifa[i] == 1:

a.remove(a[i])

else:

i += 1

如果說for…in…是自動遍歷可迭代物件,那while就是純人工手動,這樣可以保證在該加的時候讓i進行++操作,不該的時候就不亂加。

如果對於for…in…的執念很深,就需要借助副本來做,copy模組中的深淺拷貝可以說是在面試中always被提到的,這裡簡單提一下他們與傳統賦值(諸如b=a)的區別:

賦值是對物件的引用進行了複製,原物件沒有變化,b=a後兩個引用指向同一物件,因此原來要改變的時候兩個全變。

淺拷貝和深拷貝是對物件進行複製,重新開出一塊記憶體空間,淺拷貝會複製物件,但是物件內部如果存在子物件(拿列表來說,就是列表中還含有列表,例[1,2,3,4,[5,6,7]]),則不會複製,而是直接引用原物件的。深拷貝則是全部進行拷貝。

從定義上來看,深拷貝與淺拷貝都可以用於對該題目的解決。如下:

import copy

a = [0,1,1,2,2,3]

aa = copy.copy(a)

for i in a:

if i == 1:

aa.remove(i)

當然,deepcopy也可以。

python對列表進行統計計算

1 獲取指定元素出現的次數 使用count 方法可以獲取指定元素在列表 現的次數,基本語法如下 listname.count obj listname 表示列表名稱 obj 表示判斷是否存在物件,這裡只能進行精確匹配,即不能是元素的一部分 例項 talk 你們說 我資訊保安小萌新帥不帥!不帥!num...

Python 對列表中的字典進行去重

from functools import reduce data list run function lambda x,y x if y in x else x y reduce run function,data list reduce函式為python內建函式 reduce function,...

對python的package進行修改

很多時候,python提供的大量的package極大地方便了我們的程式設計。但是,當我們想要修改部分 的時候,該怎麼辦呢?本文以mmcv為例,介紹修改 的過程。在此之前,我是通過 pip install mmcv安裝的。有乙個簡單的方法可以找到安裝的路徑 在命令列終端輸入 usr local lib...