Игнорируйте нет в списке и принимайте минимальные и максимальные значения в python

#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 Извините, мы получим тот же результат без импорта математики. По ошибке я импортировал математический модуль.