Объект 'NoneType' не может быть подписан в Python - PullRequest
1 голос
/ 08 мая 2019
#i'm just testing it 

lst=[3, 2, 4, 5,1]

print([i for i in lst if i % 2 != 0].sort()[0])

#i haven't tried any thing        

#I expect the output 1

Ответы [ 3 ]

1 голос
/ 08 мая 2019

sort() сортирует список на месте и возвращает None. Похоже, вы хотели использовать sorted вместо:

print(sorted([i for i in lst if i % 2 != 0])[0])

Обратите внимание, что нет необходимости сортировать список, если вы просто берете его первый элемент. Вместо этого вы можете использовать min для того же результата с лучшей производительностью (O (n) вместо O (nlog (n)):

print(min([i for i in lst if i % 2 != 0]))
0 голосов
/ 08 мая 2019

sort () модифицирует метод и возвращает None

Это работает:

lst=[3, 2, 4, 5,1]
odds = [i for i in lst if i % 2 != 0]
ods.sort()
print(ods[0])
0 голосов
/ 08 мая 2019

Проблема здесь в том, что когда вы запускаете функцию 'sort' в списке, эта функция обновляет список и возвращает void. Итак, вы действительно пытаетесь вызвать индекс для объекта NoneType.

Лучший способ решить эту проблему - установить фильтр на переменную, выполнить сортировку для этой переменной и после этого вывести желаемое значение.

Ex: «»» l = [i для i inst, если i% 2! = 0]

l.sort ()

печать (л [0]) '' '

...