問題:給定一個整數數組?nums
,將數組中的元素向右輪轉?k
?個位置,其中?k
?是非負數。
使用代碼如下沒有辦法通過測試示例,必須將最后一行代碼改成? nums[:]=nums[-k:]+nums[:-k]切片形式:
原因:列表的切片操作?nums[start:end]
?不會修改原列表,而是返回一個新的列表對象
例如:
nums = [1, 2, 3, 4, 5]
print(nums[-2:]) # 輸出 [4, 5]
print(nums[:-2]) # 輸出 [1, 2, 3]
print(nums) # 原列表 nums 沒有改變,仍為 [1, 2, 3, 4, 5]
拼接兩個切片:
nums[-k:] + nums[:-k]
?是將兩個切片的結果拼接成一個新的列表。- 它不會影響原來的?
nums
?列表。
nums = [1, 2, 3, 4, 5]
k = 2result = nums[-k:] + nums[:-k]
print(result) # 輸出 [4, 5, 1, 2, 3]
print(nums) # 原列表 nums 不變,仍為 [1, 2, 3, 4, 5]
?盡管我們令nums=?nums[-k:] + nums[:-k],它其實相當于重新創建了一個列表,只是名稱一樣而已,但已經指向了別的地址了
切片賦值:nums[:] = nums[-k:] + nums[:-k]
nums[:]
?是對原列表的切片賦值,它會修改原列表的內容,而不會更改?nums
?的引用。- 換句話說,
nums[:]
?表示“更新整個列表的內容為右側表達式的結果”。
操作 | 是否修改原列表?nums | 備注 |
---|---|---|
nums[-k:] + nums[:-k] | 否 | 生成一個新列表,不影響原列表?nums 。 |
nums = nums[-k:] + nums[:-k] | 否(僅改變引用) | 創建新列表并重新賦值給?nums ,原列表可能被丟棄。 |
nums[:] = nums[-k:] + nums[:-k] | 是 | 更新原列表?nums ?的內容為右側表達式的結果,但列表引用保持不變。 |