好程式設計師Python培訓分享列表去重中的copy問題

好程式設計師發表於2020-11-06

   列表去重中的copy 問題有多少的小夥伴知道或者瞭解呢 ? 不清楚的小夥伴也不要著急,本篇文章 好程式設計師 Python 培訓小編就給讀者們分先一下列表去重中的 copy 問題,希望對讀者們有所幫助。

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

   第一種,利用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)

   # 執行結果

   1

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

   4

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

   1

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

   2

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

   2

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

   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)

   # 執行結果

   1

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

   3

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

   4

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

   1

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

   2

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

   2

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

   2

   [3, 4, 2, 1, 2]

   2

   [3, 4, 1, 2]

   1

   [3, 4, 1, 2]

   2

   [3, 4, 1, 2]

   Process finished with exit code 0

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2732681/,如需轉載,請註明出處,否則將追究法律責任。

相關文章