Подтвердить что ты не робот

Получите значение в индексе списка/массива или "Нет", если вне диапазона в Python

Есть ли чистый способ получить значение по списковому индексу или None, если индекс отсутствует или находится в Python?

Очевидный способ сделать это будет следующим:

if len(the_list) > i:
    return the_list[i]
else:
    return None

Тем не менее, многословие снижает читабельность кода. Есть ли чистый, простой однострочник, который можно использовать вместо этого?

4b9b3361

Ответ 1

Try:

try:
    return the_list[i]
except IndexError:
    return None

Или один вкладыш:

l[i] if i < len(l) else None

Пример:

>>> l=range(5)
>>> i=6
>>> print(l[i] if i < len(l) else None)
None
>>> i=2
>>> print(l[i] if i < len(l) else None)
2

Ответ 2

Я нахожу слайды списка для этого:

>>> x = [1, 2, 3]
>>> a = x [1:2]
>>> a
[2]
>>> b = x [4:5]
>>> b
[]

Итак, всегда обращайтесь к x [i: я + 1], если вы хотите x [i]. Вы получите список с требуемым элементом, если он существует. В противном случае вы получите пустой список.

Ответ 3

Для ваших целей вы можете исключить часть else, поскольку None возвращается по умолчанию, если данное условие не выполняется.

def return_ele(x, i):
    if len(x) > i: return x[i]

Результат

>>> x = [2,3,4]
>>> b = return_ele(x, 2)
>>> b
4
>>> b = return_ele(x, 5)
>>> b
>>> type(b)
<type 'NoneType'>

Ответ 4

return the_list[i] if len(the_list) > i else None

Ответ 5

Если вы имеете дело с небольшими списками, вам не нужно добавлять оператор if или что-то в этом роде. Простое решение - превратить список в диктовку. Тогда вы можете использовать dict.get:

table = dict(enumerate(the_list))
return table.get(i)

Вы даже можете установить другое значение по умолчанию, чем None, используя второй аргумент для dict.get. Например, используйте table.get(i, 'unknown'), чтобы вернуть 'unknown', если индекс выходит за пределы диапазона.

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

Ответ 6

Почему нет list.get(i), который работает как dict.get(i)? Возможно, есть способ добавить этот метод программно?