列表去重中的copy問題

2021-09-17 20:42:16 字數 1558 閱讀 3654

一般而言,列表去重無非那幾種方法。

第一種,利用set()沒有重複值的特性去重,簡單,但是無序。

第二種,判斷迴圈的元素是否在新列表中以此來去掉重複值,可以保持原來的順序。

第三種,迴圈遍歷,判斷當前元素的個數是否大於1,然後在刪除當前元素(需注意刪除元素後列表的變化),無序。

今天主要說的就是第三種方法了。

示例**:

list1 = [1,3,4,1,2,2,2,2,1,2]

for item in list1:

print(item)

# 統計元素的個數

count = list1.count(item)

# 如果個數大於1,就刪乙個

if count > 1:

list1.remove(item)

print(list1)

#執行結果

[3, 4, 1, 2, 2, 2, 2, 1, 2]

[3, 4, 1, 2, 2, 2, 2, 1, 2]

[3, 4, 2, 2, 2, 2, 1, 2]

[3, 4, 2, 2, 2, 1, 2]

[3, 4, 2, 2, 1, 2]

[3, 4, 2, 1, 2]

process finished with exit code 0

看最後結果,就知道這次去重失敗了,是因為沒有注意元素位置移動的問題。那請仔細看下面的**有什麼不同:

list1 = [1,3,4,1,2,2,2,2,1,2]

for item in list1.copy():

print(item)

count = list1.count(item)

if count > 1:

list1.remove(item)

print(list1)

#執行結果

[3, 4, 1, 2, 2, 2, 2, 1, 2]

[3, 4, 1, 2, 2, 2, 2, 1, 2]

[3, 4, 1, 2, 2, 2, 2, 1, 2]

[3, 4, 2, 2, 2, 2, 1, 2]

[3, 4, 2, 2, 2, 1, 2]

[3, 4, 2, 2, 1, 2]

[3, 4, 2, 1, 2]

[3, 4, 1, 2]

[3, 4, 1, 2]

[3, 4, 1, 2]

process finished with exit code 0

只是加了乙個copy()方法,就避免了元素位置因為刪除而移動的問題。copy()方法是淺拷貝,它將列表的值都拷貝了出來,且生成了乙個新的空間儲存值(copy()方法後新列表的id值和原來的列表id值不一樣),所以下面的列表刪除元素後元素的變動不影響拷貝後的列表值。

最後告訴你的是,

零基礎學習python肯定難,python的專業程度本身就不簡單,學習這事本來就是一件非常煎熬的事情,人都不願意學習,可是沒辦法,為了生存掌握乙個技能,你必須學。自己乙個人努力拼搏可能最終短期見不到效果容易重複走彎路,而與千人py學習者一起努力,相當於一千個人在幫你。歡迎在qq上加入我們學習聚集群:816572891。

web無序列表去掉點 列表去重中的copy問題

一般而言,列表去重無非那幾種方法。第一種,利用set 沒有重複值的特性去重,簡單,但是無序。第二種,判斷迴圈的元素是否在新列表中以此來去掉重複值,可以保持原來的順序。第三種,迴圈遍歷,判斷當前元素的個數是否大於1,然後在刪除當前元素 需注意刪除元素後列表的變化 無序。今天主要說的就是第三種方法了。示...

python中列表去重

li 2,5,4,7,2,1,3,2,6,7 print 方法一列表追加 center 40,list1 for i in li if i not in list1 print list1 print 推導式實現 center 40,list2 print list2 print 方法二利用字典鍵唯...

python中列表去重

列表去重 定義乙個函式 def remove element m list 將列表 10,1,2,20,10,3,2,1,15,20,44,56,3,2,1 去除重複元素 def remove element m list 定義乙個空列表 new list 迴圈判斷某個元素是不是在新的列表中,如果在...