#python #python-3.x #list #function
Вопрос:
У меня есть список, и мне нужно применить к нему функцию.
values =[1,3,5,None]
max(values)
и я получаю эту ошибку
TypeError: '>' not supported between instances of 'NoneType' and 'int'
но ожидаемый результат таков
5
Помощь приветствуется.
Комментарии:
1.
max(values, key=lambda x:0 if x is None else x)
? Это, очевидно, не сработает для негативов.2. это не работает для min().. Однако это решает эту проблему..
Ответ №1:
Используйте понимание списка.
max([v for v in values if v is not None])
Комментарии:
1. но это требует еще одного цикла и снижает производительность.. Любым другим лучшим способом..
2. Или другие библиотеки, которые делают это так же просто, как функция max..
3. @MadanRaj если вы беспокоитесь о пространстве, используйте
max(v for v in values if v is not None)
это на основе генератора.4. Я думаю, что лучше всего использовать фильтр.. Что дает большую производительность.. Это нормально..
5. @MadanRaj Ты знаешь , что фильтр быстрее?
Ответ №2:
вы можете использовать функцию filter (), чтобы удалить ни одного из списка.
max(list(filter(None,values)))`
Комментарии:
1. К сожалению, этот ответ неверен. Попробуй с
[-2,-1,0]
.0
будет отфильтрован и-1
станет максимальным, а это неверно.2. @MadanRaj Отрицательные значения не являются проблемой, но ноль есть.
filter(None, ...)
удаляет все логическое значение false, не толькоNone
.
Ответ №3:
Вы можете использовать функцию max и удалить None из списка, просто используя математический модуль, и повторить список, и проверить, не равно ли i None. и добавьте его в новый список.
Код ->
values =[1,3,5,None]
newlist = []
for i in values:
if i != None:
newlist.append(i)
max(newlist)
Комментарии:
1. Из любопытства, для чего вы используете
math
модуль?2. @MadanRaj Да, мы можем использовать фильтр и функцию Лямбда —> max(фильтр(лямбда t: t не равно None, значения))
3. Объяснение —> 1.фильтр принимает два аргумента, первый: функция, второй: исходный список 2. Всякий раз, когда запускается фильтр, все элементы, присутствующие в списке, передаются один за другим в функции, которая возвращает значение true или false в зависимости от условия, указанного в нем 3. Если он возвращает значение true, то элементы сохраняются в отфильтрованном списке, иначе он не сохраняется 4. Здесь вместо создания отдельной функции мы использовали лямбда-функцию
4. @Axe319 Извините, мы получим тот же результат без импорта математики. По ошибке я импортировал математический модуль.