我在學習Python,來自C#/ Java背景,並且正在玩弄列表行爲。我已經閱讀了一些文檔,但我不明白如何以及爲什麼使用索引大於長度爲1的分片可以附加項目。在Python中追加列表的說明和首選方法
ls = ["a", "b", "c", "d"]
n = len(ls) # n = 4
letter = ls[4] # index out of range (list indexes are 0 - 3)
# the following all do the same thing
ls += ["echo"]
ls.append("foxtrot")
ls[len(ls):] = ["golf"] # equivalent to ls[len(ls): len(ls)]
print(ls)
儘管對我來說這似乎很奇怪,但我知道切片如何修改它們操作的列表。我沒有得到的是爲什麼list[len(list)]
導致預期的越界誤差,但list[len(list):]
沒有。我知道切片與索引有根本的區別,而不是當切片以列表值之外的索引開始時在內部發生的情況。
爲什麼我可以從一個不存在的元素(len(list)
)開始的列表中返回一個切片?爲什麼這讓我擴大名單?
此外,上述前三種附加項目的方法中,從約定或性能角度來看,哪一項更受歡迎?它們中的任何一個都存在性能劣勢?
我無法解釋當你影響列表拼接時發生了什麼(我甚至不知道爲什麼這是允許的)。首選的形式在python中是最常用的,它可以是'ls + = [「alpha」]或'ls.append(「tango」)'。從性能角度來看,這取決於你的python解釋器。 – DainDwarf
請縮小你的問題;目前尚不清楚它是否是http://stackoverflow.com/q/9490058/3001761或http://stackoverflow.com/q/10623302/3001761或其他內容的重複。你也可以把它看作是改進它的一部分,已經有很多信息了。 – jonrsharpe
注意'ls + ='需要'ls'在本地範圍內(或者在函數中給定'global'聲明),因爲它執行的是分配,但是'ls.append'可以在全局變量上工作,因爲它僅僅是一個方法調用一個現有的可變對象,而不是一個賦值。 「 –