2015-10-26 2 views
2

Python и Ruby имеют метод вставки.Вставка Python vs Ruby insert

Python:

>>> a=[1,2,3,4,5] 
>>> a.insert(0, 0) 
>>> a 
[0, 1, 2, 3, 4, 5] 

Ruby:

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] 

Ruby:

a=[1,2,3,4,5] 
# => [1, 2, 3, 4, 5] 
a.insert(-1, 6) 
# => [1, 2, 3, 4, 5, 6] 

Почему есть эта разница? Как понять?

ответ

4

в python: insert (x, val), это означает вставить в местоположение до x.

so, a.insert(-1, 6)-> put the 6 before -1(location) 

в рубине: это означает вставить в это место х.

so, a.insert(-1, 6)-> put the 6 at -1. 
4

В 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 Array#insert явно говорит, что новое значение вставляется после элемента, если индекс является отрицательным: подсчитывать

Отрицательные индексы в обратном направлении от конца массива, где -1 является последний элемент. Если используется отрицательный индекс, эти значения будут вставлены после этого элемента, поэтому с использованием индекса -1 вставьте значения в конец массива.