Python和Ruby都有insert方法。
的Python:
>>> a=[1,2,3,4,5]
>>> a.insert(0, 0)
>>> a
[0, 1, 2, 3, 4, 5]
红宝石:
a=[1,2,3,4,5]
# => [1, 2, 3, 4, 5]
a.insert(0,0)
# => [0, 1, 2, 3, 4, 5]
它们具有相同的效果,但如果给出负指数,则结果不同。
的Python:
>>> a=[1,2,3,4,5]
>>> a.insert(-1, 6)
>>> a
[1, 2, 3, 4, 6, 5]
红宝石:
a=[1,2,3,4,5]
# => [1, 2, 3, 4, 5]
a.insert(-1, 6)
# => [1, 2, 3, 4, 5, 6]
为什么会出现这种差异?怎么理解?
答案 0 :(得分:4)
:insert(x,val),表示插入x之前的位置。
so, a.insert(-1, 6)-> put the 6 before -1(location)
红宝石中的:表示插入此位置x。
so, a.insert(-1, 6)-> put the 6 at -1.
答案 1 :(得分:4)
在Python中,新对象插入到某个索引的元素之前。给定0
的插入点,在索引0
的项目之前插入一个新元素,这会导致插入的项目成为第一个。给定-1
的插入点,在最后一个项之前插入一个新元素,因此它成为倒数第二个元素。
如果您想在Python list
的末尾插入内容,只需使用append()
。
答案 2 :(得分:3)
在Python中,负指数的insert()
与正指数更为一致。 a.insert(i, x)
始终等同于a[i:i] = [x]
。但是,您不能在结束后插入负数索引。
您可以使用a.insert(len(a), x)
,相当于a.append(x)
。
在Ruby中,Array#insert
明确表示如果索引为负数,则在元素之后插入新值:
负数索引从数组末尾向后计数,其中
-1
是最后一个元素。如果使用负索引,则将在该元素之后插入给定值,因此使用索引-1
将在数组末尾插入值。