Python:Библиотека/3/Модули/builtins/filter(): различия между версиями
Материал из Онлайн справочника
Myagkij (обсуждение | вклад) (→№2) |
Нет описания правки |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 5: | Строка 5: | ||
==filter()== | ==filter()== | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
filter(func, seq) | filter(func, seq) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Возвращает итератор, который содержит элементы ''seq'', для которых ''func'' возвращает истинное значение. | Возвращает итератор, который содержит элементы ''seq'', для которых ''func'' возвращает истинное значение. | ||
{{Спойлер|Функция filter() эквивалентна выражению-генератору, а не генератору списка.}} | |||
==Параметры== | ==Параметры== | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
func - функция | func - функция | ||
seq - любой тип последовательности | seq - любой тип последовательности | ||
Строка 24: | Строка 26: | ||
Дана последовательность чисел: | Дана последовательность чисел: | ||
<syntaxhighlight lang="python | <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 | <syntaxhighlight lang="python"> | ||
def positive_numbers(num): | def positive_numbers(num): | ||
return num > 0 | return num > 0 | ||
Строка 37: | Строка 39: | ||
Воспользуемся списковым включением и сгенерируем список положительных чисел: | Воспользуемся списковым включением и сгенерируем список положительных чисел: | ||
<syntaxhighlight lang="python | <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 | <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 | <syntaxhighlight lang="python"> | ||
[i for i in seq if item] | [i for i in seq if item] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 57: | Строка 59: | ||
Проверим это на последовательности чисел: | Проверим это на последовательности чисел: | ||
<syntaxhighlight lang="python | <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 | <syntaxhighlight lang="python"> | ||
[i for i in filter(None, nums)] | [i for i in filter(None, nums)] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 69: | Строка 71: | ||
Результат: | Результат: | ||
<syntaxhighlight lang="python | <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. |
См.также
Внешние ссылки