问题引入:
在进行 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]
相关博客:
大家加油 :)