Обратный возврат того же индекса, если значение одинаково - PullRequest
1 голос
/ 22 октября 2019

Это прекрасно работает для моих целей, за исключением того, что когда значение (в данном случае 20) одинаково, оно будет возвращать индекс только спереди. Код выглядит следующим образом, я не уверен, что такое обходной путь, но мне нужно, чтобы он возвращал индекс значения из обратного. У меня есть некоторые числа с плавающей точкой, которые могут отличаться, но, кажется, труднее с ними работать.

lmt_lst = [-1, 5, 9, 20, 44, 37, 22, 20, 17, 12, 6, 1, -6]

lft_lmt = next(x for x in lmt_lst if x >=20)
rgt_lmt = next(x for x in reversed(lmt_lst) if x >= 20)

lft_idx = lmt_lst.index(lft_lmt)
rgt_lmt = lmt_lst.index(rgt_lmt)

print('Left Limit:', lft_lmt, 'Left Index:', lft_idx)
print('Right Limit:', rgt_lmt, 'Right Index:', rgt_idx)

Если вы измените любое из значений '20' на 21, оно будет работать просто отлично

Этоне возвращает ошибок, просто возвращает первый индекс значения, независимо от обратного

1 Ответ

3 голосов
/ 22 октября 2019

Ваши списки lft_lmt и rgt_lmt содержат только значения, которые больше или равны 20, поэтому ваши списки [20, 44, 37, 22, 20] и [20, 22, 37, 44, 20] соответственно.

>>> lmt_lst = [-1, 5, 9, 20, 44, 37, 22, 20, 17, 12, 6, 1, -6]
>>> [x for x in lmt_lst if x >=20]
[20, 44, 37, 22, 20]
>>> [x for x in reversed(lmt_lst) if x >= 20]
[20, 22, 37, 44, 20]

Первый элемент обоихэти списки 20, и поэтому, когда вы будете искать их (используя .index, который выполняет поиск в начале списка) в начальном списке, вы получите 3раз (потому что 20 находится в позиции 3 независимо от того, сколько раз вы просматриваете список от начала до конца).

Чтобы найти правильный индекс, вы хотите выполнить поиск в обратном списке и учесть результат, как если быпоиск по списку назад:

>>> lft_idx = lmt_lst.index(lft_lmt)
>>> lft_idx
3
>>> rgt_idx = len(lmt_lst) - 1 - lmt_lst[::-1].index(rgt_lmt)
>>> rgt_idx
7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...