Проверка на то что список не пустой

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 шт):

Автор решения: чистов_n

Если я правильно понял вопрос, то проверить пустой ли список очень просто:

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("Список пуст!")
  1. Проверяем что длина списка lst больше нуля.
→ Ссылка
Автор решения: u111
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(...)
→ Ссылка
Автор решения: CrazyElf

Вообще зависит от того, что вы хотите делать в случае, если список пуст. А то можно и такой, например, вариант использовать в каких-то случаях (ваш код внутри list я не стал повторять для краткости):

result = (list(...) or [None])[-1]

В случае, если list получится пустым, в result будет None (ну, или всё что вам угодно там можно поместить).

→ Ссылка
Автор решения: Stanislav Volodarskiy
$ 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

Но правила хорошего тона требуют проверять длину списка а не откладывать проблему на потом.

→ Ссылка