Проверка на то что список не пустой
list(rank['role'] for rank in load(open('data.json', encoding='utf-8'))['ranks'] if rank['kills'])[-1]
Но если список list(rank['role'] for rank in load(open('data.json', encoding='utf-8'))['ranks'] if rank['kills'])
пустой, то когда я пытаюсь получить последний элемент, мне выдаёт ошибку потому что список пустой.
Вопрос в том как мне сохранить получение последнего элемента и чтобы не было текущей ошибки.
Ответы (4 шт):
Если я правильно понял вопрос, то проверить пустой ли список очень просто:
lst = list(rank['role'] for rank in load(open('data.json', encoding='utf-8'))['ranks'] if rank['kills'])
if len(lst) > 0: # (1)
print(lst[-1])
else:
print("Список пуст!")
- Проверяем что длина списка
lst
больше нуля.
lst = list(rank['role'] for rank in load(open('data.json', encoding='utf-8'))['ranks'] if rank['kills'])
if lst:
result = lst[-1]
else:
result = None
result = [None] + list(...)
Вообще зависит от того, что вы хотите делать в случае, если список пуст. А то можно и такой, например, вариант использовать в каких-то случаях (ваш код внутри list
я не стал повторять для краткости):
result = (list(...) or [None])[-1]
В случае, если list
получится пустым, в result
будет None
(ну, или всё что вам угодно там можно поместить).
$ python
Python 3.11.2 (main, Aug 26 2024, 07:20:54) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
@>>> lst = []
@>>> lst[-1:]
[]
@>>> lst = [1, 2, 3]
@>>> lst[-1:]
[3]
Если нужно получить значение заглушку (None
), то так:
@>>> lst = []
@>>> ([None] + lst[-1:])[-1]
@>>> lst = [1, 2, 3]
@>>> ([None] + lst[-1:])[-1]
3
Но правила хорошего тона требуют проверять длину списка а не откладывать проблему на потом.