Python:Библиотека/3/Модули/builtins/filter(): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показаны 2 промежуточные версии 1 участника)
Строка 5: Строка 5:
==filter()==
==filter()==


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
filter(func, seq)
filter(func, seq)
</syntaxhighlight>
</syntaxhighlight>


Возвращает итератор, который содержит элементы ''seq'', для которых ''func'' возвращает истинное значение.
Возвращает итератор, который содержит элементы ''seq'', для которых ''func'' возвращает истинное значение.
{{Спойлер|Функция filter() эквивалентна выражению-генератору, а не генератору списка.}}


==Параметры==
==Параметры==


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
func - функция
func - функция
seq  - любой тип последовательности
seq  - любой тип последовательности
Строка 24: Строка 26:
Дана последовательность чисел:
Дана последовательность чисел:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
nums = [111, -4, 0, 10, 56, -38, 11, 78, -9, 100, 99, 1,2,3]
nums = [111, -4, 0, 10, 56, -38, 11, 78, -9, 100, 99, 1,2,3]
</syntaxhighlight>
</syntaxhighlight>
Строка 30: Строка 32:
Напишем простую функцию для фильтра, которая возвращает True, если ей передали число больше 0:
Напишем простую функцию для фильтра, которая возвращает True, если ей передали число больше 0:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
def positive_numbers(num):
def positive_numbers(num):
return num > 0
return num > 0
Строка 37: Строка 39:
Воспользуемся списковым включением и сгенерируем список положительных чисел:
Воспользуемся списковым включением и сгенерируем список положительных чисел:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
[i for i in filter(positive_numbers, nums)]
[i for i in filter(positive_numbers, nums)]
</syntaxhighlight>
</syntaxhighlight>
Строка 43: Строка 45:
Вывод:
Вывод:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
[111, 10, 56, 11, 78, 100, 99, 1, 2, 3]
[111, 10, 56, 11, 78, 100, 99, 1, 2, 3]
</syntaxhighlight>
</syntaxhighlight>
Строка 51: Строка 53:
Если аргумент func равен None, то filter проверяет истинность элементов подобно следующему генератору списка:  
Если аргумент func равен None, то filter проверяет истинность элементов подобно следующему генератору списка:  


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
[i for i in seq if item]
[i for i in seq if item]
</syntaxhighlight>
</syntaxhighlight>
Строка 57: Строка 59:
Проверим это на последовательности чисел:
Проверим это на последовательности чисел:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
nums = [111, -4, 0, 10, 56, -38, 11, 78, -9, 100, 99, 1,2,3]
nums = [111, -4, 0, 10, 56, -38, 11, 78, -9, 100, 99, 1,2,3]
</syntaxhighlight>
</syntaxhighlight>
Строка 63: Строка 65:
Генерируем список:
Генерируем список:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
[i for i in filter(None, nums)]
[i for i in filter(None, nums)]
</syntaxhighlight>
</syntaxhighlight>
Строка 69: Строка 71:
Результат:
Результат:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
[111, -4, 10, 56, -38, 11, 78, -9, 100, 99, 1, 2, 3]
[111, -4, 10, 56, -38, 11, 78, -9, 100, 99, 1, 2, 3]
</syntaxhighlight>
</syntaxhighlight>

Текущая версия от 18:10, 14 мая 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.


filter()

filter(func, seq)

Возвращает итератор, который содержит элементы seq, для которых func возвращает истинное значение.

Функция filter() эквивалентна выражению-генератору, а не генератору списка.


Параметры

func - функция
seq  - любой тип последовательности

Пример

№1

Дана последовательность чисел:

nums = [111, -4, 0, 10, 56, -38, 11, 78, -9, 100, 99, 1,2,3]

Напишем простую функцию для фильтра, которая возвращает True, если ей передали число больше 0:

def positive_numbers(num):
	return num > 0

Воспользуемся списковым включением и сгенерируем список положительных чисел:

[i for i in filter(positive_numbers, nums)]

Вывод:

[111, 10, 56, 11, 78, 100, 99, 1, 2, 3]

№2

Если аргумент func равен None, то filter проверяет истинность элементов подобно следующему генератору списка:

[i for i in seq if item]

Проверим это на последовательности чисел:

nums = [111, -4, 0, 10, 56, -38, 11, 78, -9, 100, 99, 1,2,3]

Генерируем список:

[i for i in filter(None, nums)]

Результат:

[111, -4, 10, 56, -38, 11, 78, -9, 100, 99, 1, 2, 3]
В данном случае, проверка на истину возвращает True, для всех чисел не равных 0.


См.также

Внешние ссылки