問題引入:
在進行 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]
相關博客:
大家加油 :)