Преобразовать отрицательный индекс в Python в положительный индекс - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь найти способ получить индекс элемента в списке в Python, учитывая его отрицательный индекс, включая индекс 0.

Например, со списком, l размера 4:

l[0]  # index 0
l[-1] # index 3
l[-2] # index 2

Я пытался использовать

index = negative + len(l)

однако это не будет работать, если индекс равен 0.

Единственный способ, который я нашел до сих пор, - это оператор if/else.

 index = 0 if negative == 0 else negative + len(l)

Есть ли возможный способ сделать это в Python без использования оператора if?

Я пытаюсь сохранить индекс элемента, чтобы я мог получить к нему доступ позже, но мне дают индексы, начиная с 0 и перемещаясь назад по списку, и я хотел бы преобразовать их из отрицательного в положительный.

Ответы [ 4 ]

0 голосов
/ 25 августа 2018

индекс = индекс по модулю размера

index = index % len(list)

Для списка размера 4 он будет иметь следующие значения для данных индексов:

 4 -> 0
 3 -> 3
 2 -> 2
 1 -> 1 
 0 -> 0
-1 -> 3
-2 -> 2
-3 -> 1
-4 -> 0
0 голосов
/ 25 августа 2018

Отрицательный индекс равен вычитанию из длины:

>> lst = [1, 2, 3]
>> lst[-1] == lst[len(lst) - 1]
True

Таким образом, вы можете получить всегда положительное значение с помощью небольшого оператора if:

i = -2
index = i if number >= 0 else len(lst) - i 

На самом деле, вы можете использовать модуль, чтобы сделать обтекание индекса обратно до 0, если длина превышает длину списка:

# assuming length of list is 4
index = i % len(list)

# with i at 0:
0 % 4 == 0 # that works

# with i as -2
-2 % 4 == 2 # that works

# with i as 3:
3 % 4 == 3 % # that works
0 голосов
/ 25 августа 2018

Вы можете использовать оператор дополнения ~.Это даст вам обратный индекс, как вам нужно.

>>> l = ["a", "b", "c", "d"]
>>> l[0]
'a'
>>> l[~0]
'd'
>>> l[~3]
'a'
>>> l[~-1]
'a'
>>> l[-1]
'd'
0 голосов
/ 25 августа 2018

Если вы попытаетесь «вернуться», начиная с неотрицательного индекса, вы также можете использовать

index = len(l) - index - 1

для вычисления «индекса со спины».

Этокак вы должны это сделать во многих других языках программирования.Отрицательные индексы питонов - просто синтаксический сахар.

Но если вы действительно используете отрицательные индексы, этот грязный хак - это однострочник без if и else:

index = int(negative != 0 and negative + len(l))

Объяснение:

  • , если negative == 0 результат выражения and равен False, который преобразуется в 0 путем вызова int.
  • , в противном случае результат and is negative + len, см. также здесь .Тогда вызов int ничего не делает.

Это хорошо для изучения Python, но я обычно избегаю таких уловок.Их трудно читать для вас и других, и, может быть, вы захотите прочитать свою программу через несколько месяцев, и тогда вам будет интересно, что делает эта строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...