python中數(shù)組nums[:]和nums的區(qū)別
leetcode中有一道題。題目為:
給你一個(gè)數(shù)組 nums 和一個(gè)值 val,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。
元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的元素。
錯(cuò)誤代碼:
class Solution: def removeElement(self, nums: List[int], val: int) -> int: for i in nums: print('----', i) if i == val: nums.remove(val) print(len(nums),nums) print(nums) return len(nums)
正確代碼:
class Solution: def removeElement(self, nums: List[int], val: int) -> int: for i in nums[:]: print('----', i) if i == val: nums.remove(val) print(len(nums),nums) print(nums) return len(nums)
從以上可以看到,他們之間差了一個(gè)[:]
但是單獨(dú)執(zhí)行:
for i in nums[:]: print('i',i) for ii in nums: print('ii',ii)
輸出結(jié)果一抹抹一樣樣,這是為什么呢?
在 Python 中,nums 是一個(gè)列表對象。nums[:] 表示對這個(gè)列表進(jìn)行切片操作,切片操作的結(jié)果是返回一個(gè)新的列表對象,其中包含了原列表中的所有元素。
雖然 nums 和 nums[:] 看起來很相似,但它們之間有一個(gè)重要的區(qū)別。當(dāng)你將 nums 分配給某個(gè)變量時(shí),該變量實(shí)際上僅僅是指向了原始列表對象的引用,因此對該變量的任何更改都會(huì)反映在原始列表對象上。例如:
nums = [1, 2, 3] new_nums = nums new_nums[0] = 0 print(nums) ?# 輸出 [0, 2, 3]
然而,如果你使用 nums[:] 來創(chuàng)建一個(gè)新的列表對象,則對新列表對象的任何更改都不會(huì)影響原始列表對象。例如:
nums = [1, 2, 3] new_nums = nums[:] new_nums[0] = 0 print(nums) ?# 輸出 [1, 2, 3]
在這個(gè)例子中,我們使用 nums[:] 創(chuàng)建了一個(gè)新的列表對象 new_nums,并將其賦值給變量 new_nums。然后我們修改了 new_nums 中的第一個(gè)元素,但是原始列表 nums 沒有被修改。
因此,nums 和 nums[:] 的區(qū)別在于,前者是一個(gè)指向原始列表對象的引用,而后者是一個(gè)新的、獨(dú)立的列表對象。
由此可以解釋上列l(wèi)eetcode題解了。實(shí)際上切片是生成了一個(gè)新的拷貝。而不是引用。
到此這篇關(guān)于python中數(shù)組nums[:]和nums的區(qū)別的文章就介紹到這了,更多相關(guān)python nums[:]和nums內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中使用enumerate函數(shù)遍歷元素實(shí)例
這篇文章主要介紹了python中使用enumerate函數(shù)遍歷元素實(shí)例,這是一個(gè)比較簡單的例子,需要的朋友可以參考下2014-06-06將Pytorch模型從CPU轉(zhuǎn)換成GPU的實(shí)現(xiàn)方法
今天小編就為大家分享一篇將Pytorch模型從CPU轉(zhuǎn)換成GPU的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08python switch 實(shí)現(xiàn)多分支選擇功能
這篇文章主要介紹了python switch 實(shí)現(xiàn)多分支選擇功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12python實(shí)現(xiàn)信號(hào)時(shí)域統(tǒng)計(jì)特征提取代碼
今天小編就為大家分享一篇python實(shí)現(xiàn)信號(hào)時(shí)域統(tǒng)計(jì)特征提取代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python Django批量導(dǎo)入數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了python Django批量導(dǎo)入數(shù)據(jù)的相關(guān)資料感興趣的小伙伴們可以參考一下2016-03-03python?pycharm中使用opencv時(shí)沒有代碼自動(dòng)補(bǔ)全提示的解決方案
我們在使用pycharm的時(shí)候總是很喜歡其強(qiáng)大的代碼提示功能,下面這篇文章主要給大家介紹了關(guān)于python?pycharm中使用opencv時(shí)沒有代碼自動(dòng)補(bǔ)全提示的解決方案,需要的朋友可以參考下2022-09-09