Отрицательный индекс во вложенном списке - PullRequest
1 голос
/ 26 мая 2020

Допустим, у меня есть такой вложенный список:

mylist = [[],[],[]]

, и я хочу вставить элементы в конец второго вложенного списка:

mylist[1].insert(-1, 1)
mylist[1].insert(-1, 2)

Результат я ожидал:

[[], [1, 2], []]

, но вместо этого я получил:

[[], [2, 1], []]

Кто-нибудь может мне это объяснить? Я думал, что индекс -1 всегда указывает на последнюю позицию списка.

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

согласно документации (https://docs.python.org/3/tutorial/datastructures.html#more -on-lists ), первым аргументом метода вставки является индекс элемента перед , который нужно вставить ... и - 1 обозначает последний элемент списка: поэтому, вызывая insert (-1, ...), вставляемый вами элемент всегда становится предпоследним элементом вашего списка.

это легко проверить. если вы вставите еще один элемент

mylist[1].insert(-1, 3)

, вы заметите, что результирующий список станет

[[], [2, 3, 1], []]

, поэтому, вероятно, следует вместо этого использовать добавление. или рассчитать индекс динамически, например

mylist[1].insert(len(mylist[1]), 3)
1 голос
/ 26 мая 2020

Если список содержит, например, 3 элемента, они нумеруются от 0 до 2 (т.е. 0, 1, 2).

Если вы хотите использовать отрицательные индексы, они нумеруются от -3 до -1 (т.е. -3, -2, -1).

Теперь, если вы хотите вставить новый элемент в позицию -1, это то же самое, что и вставка в позицию 2, т.е. вставленный элемент станет element[2].

Но element[2] будет тогда элементом 4-элементного списка , поэтому его текущая позиция в отрицательной записи не -1, а -2:

element[-4], element[-3], element[-2], element[-1]
1 голос
/ 26 мая 2020

Из этой страницы ,

list.insert(index, element) означает, что вы вставляете element в индекс index. .insert(-1, value) означает вставку value в последний элемент списка (index=len(lst)-1). Итак,

mylist[1].insert(1, 1)
mylist[1].insert(1, 2)

должно решить проблему.

Другой подход - использовать append, как сказал другой.

mylist[1].append(1)
mylist[1].append(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...