问题描述
Python和Ruby都有insert方法。
蟒蛇:
>>> 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]
它们具有相同的效果,但如果给出负指数,结果就不同了。
蟒蛇:
>>> 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]
为什么会有这种差异? 如何理解?
1楼
在python中: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.
2楼
在Python中,新对象插入到特定索引的元素之前。
给定插入点0
,在索引0
处的项之前插入新元素,这导致插入的项成为第一个。
给定插入点-1
,在最后一个项之前插入一个新元素,因此它成为倒数第二个元素。
如果要在Python list
的末尾插入内容,只需使用append()
。
3楼
在Python中,带负索引的insert()
与正索引更一致。
a.insert(i, x)
总是等于a[i:i] = [x]
。
但是,您不能在结束后使用负数索引。
你可以使用a.insert(len(a), x)
,它相当于a.append(x)
。
在Ruby中, 明确表示如果索引为负数,则在元素后面插入新值:
负数指数从数组末尾向后计数,其中
-1
是最后一个元素。 如果使用负索引,则将在该元素之后插入给定值,因此使用-1
的索引将在数组末尾插入值。