Получите значение в индексе списка/массива или "Нет", если вне диапазона в Python
Есть ли чистый способ получить значение по списковому индексу или None
, если индекс отсутствует или находится в Python?
Очевидный способ сделать это будет следующим:
if len(the_list) > i:
return the_list[i]
else:
return None
Тем не менее, многословие снижает читабельность кода. Есть ли чистый, простой однострочник, который можно использовать вместо этого?
Ответы
Ответ 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)? Возможно, есть способ добавить этот метод программно?