我在学习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'可以在全局变量上工作,因为它仅仅是一个方法调用一个现有的可变对象,而不是一个赋值。 “ –