深copy淺copy解決Python中的remove問題

問題引入:

在進行 remove 移除數組中相同數字的操作時,發現最後的返回結果中仍然會包含未完全移除的數字。

class Solution(object):
    def removeElement(self, nums, val):

        for number in nums:
            if number == val:
                nums.remove(val)
        return nums

s = Solution()
nums = [0, 1, 2, 2, 3, 0, 4, 2]
val = 2
print(s.removeElement(nums, val))

結果爲: [0, 1, 3, 0, 4, 2]


問題思考與分析:

For in 是對下標進行操作,而remove是對值進行操作

當執行原始數組[0, 1, 2, 2, 3, 0, 4, 2]的前兩個不符合,則保留,第三個數組符合操作,則移除,此時數組爲[0, 1, 2, 3, 0, 4, 2],因爲for in 是按照下標取值的,因此就會把下一個數字2跳過,轉而判斷數字3是否滿足要求


問題思考與分析:

有必要了解一下 淺拷貝深拷貝

   淺拷貝 是什麼呢?淺拷貝是在複製的時候只增加了一個指針,沒有給其分配了內存空間,即你原來有一個a列表,你這個a裏的值都有指向自己的指針,而且也有自己的內存空間a1,當淺拷貝a列表的時候得到一個A,這個A裏的值都有指向自己的指針,但是他的的內存空間還是a1;這個時候你對無論是a還是A進行操作,都會改變內存空間a1裏的值。

   深拷貝 是什麼呢?深拷貝是在複製的時候不但增加了一個指針,而且還給其分配了內存空間,即你原來有一個a列表,你這個a裏的值都有指向自己的指針,而且也有自己的內存空間a1,當深拷貝a列表的時候得到一個A,這個A裏的值都有指向自己的指針,而且也有自己的內存空間A1;那麼你再對原來的進行操作的時候可以去a裏去尋找,在A裏進行操作,由於都有自己的獨立的內存空間,那麼不會相互影響。就可以避免遺漏值,出現錯誤。

import copy
class Solution(object):
    def removeElement(self, nums, val):

        nums_copy = copy.deepcopy(nums)
        for number in nums:
            if number == val:
                nums_copy.remove(val)
        return nums_copy

s = Solution()
nums = [0, 1, 2, 2, 3, 0, 4, 2]
val = 2
print(s.removeElement(nums, val))

結果爲:[0, 1, 3, 0, 4]


相關博客:

python中的copy.deepcopy()

大家加油 :)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章