我見過的人都說只是通過附加舊如何從切片中刪除最後一個元素?
*slc = append(*slc[:item], *slc[item+1:]...)
,但如果你想刪除的最後一個元素切片什麼創建一個新的片?
如果您嘗試用i+1
替換i
(最後一個元素),由於沒有i+1
,它將返回一個超出界限的錯誤。
我見過的人都說只是通過附加舊如何從切片中刪除最後一個元素?
*slc = append(*slc[:item], *slc[item+1:]...)
,但如果你想刪除的最後一個元素切片什麼創建一個新的片?
如果您嘗試用i+1
替換i
(最後一個元素),由於沒有i+1
,它將返回一個超出界限的錯誤。
您可以使用len()
找到使用索引的最後一個元素前的長度和重排:
if len(slice) > 0 {
slice = slice[:len(slice)-1]
}
TL; DR:
myslice = myslice[:len(myslice) - 1]
順便說一句,這將如果「myslice」爲零,則失敗。
較長的答案:
myslice = myslice[:len(myslice) - 1]
如果 「myslice」 是零大小這將失敗。
切片是指向底層數組的數據結構,切片切片等操作使用相同的底層數組。
這意味着如果您切片,則新切片仍將指向與原切片相同的數據。
通過以上操作,最後一個元素仍然在數組中,但您將無法再引用它。
編輯
澄清: 如果您在重新分區分片到原來的長度,你就可以參考上一對象
/編輯
如果你有一個非常大片,你也想修剪底層數組來節省內存,你可能想用「複製」來創建一個更小的底層數組的新片,並讓舊的大片得到垃圾回收。
如果'len(slice)== 0'會失敗:'panic:runtime error:slice bounds out of range'。 – peterSO 2014-10-03 01:56:51
...好的,是的。這不是問題的一部分..但我會更新我的答案以幫助解決這個問題。 – 2014-10-03 01:57:36
另外,no:=,slice已經定義。 :) – LinearZoetrope 2014-10-03 02:00:50