Документация по Python

Фильтрация последовательностей

В: Документация по Python

Введение

Примеры

Основное использование фильтра

Для того, чтобы filter Сбрасывает элементы последовательности на основе некоторых критериев:

names = ['Fred', 'Wilma', 'Barney']

def long_name(name):
    return len(name) > 5

 

filter (long_name, names) # Out: ['Barney'] [имя для имени в именах, если len (name)> 5] # понимание списка эквивалентных номеров # Out: ['Barney'] из itertools импортировать ifilter ifilter (long_name, names) # как генератор (похож на встроенный фильтр python 3.x) # Out:  list (ifilter (long_name, names)) # эквивалент фильтра со списками # Out: ['Barney'] (имя для имени в именах, если len (name)> 5) # эквивалентное выражение генератора # Out:  в 0x0000000003FD5D38>   # Помимо опций для более старых версий Python 2.x, есть функция future_builtin: из фильтра фильтра import_builtins (long_name, names) #, идентичного itertools.ifilter # Out:  фильтр (long_name, names) # возвращает генератор # Out:  list (filter (long_name, names)) # приведение к списку # Out: ['Barney'] (имя для имени в именах, если len (name)> 5) # эквивалентное выражение генератора # Out:  в 0x000001C6F49BF4C0>

Фильтр без функции

Если параметр функции не None , то будет использоваться функция тождества:

list(filter(None, [1, 0, 2, [], '', 'a']))  # discards 0, [] and ''   
# Out: [1, 2, 'a']

 

[i для i в [1, 0, 2, [], '', 'a'], если i] # эквивалентное понимание списка  (i для i в [1, 0, 2, [], '', 'a'], если i) # эквивалентное выражение генератора

Фильтр как проверка на короткое замыкание

filter (Python 3.x) и ifilter (Python 2.x) возвращает генератор , таким образом они могут быть очень удобно при создании теста короткого замыкания , как or или and :

# не рекомендуется в реальном использовании, но пример краткий: из itertools импортируйте ifilter в качестве фильтра  из фильтра импорта future_builtins

Чтобы найти первый элемент, который меньше 100:

car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
def find_something_smaller_than(name_value_tuple):
    print('Check {0}, {1}$'.format(*name_value_tuple)
    return name_value_tuple[1] < 100
next(filter(find_something_smaller_than, car_shop))
# Print: Check Toyota, 1000$
#        Check rectangular tire, 80$
# Out: ('rectangular tire', 80)

 

next -функция дает следующему (в данном случае первый) элемент и, следовательно , причина , почему это короткое замыкание.

Дополнительная функция: filterfalse, ifilterfalse

Существует дополнительная функция filter в itertools -модуле:

# не рекомендуется в реальном использовании, но сохраняет пример действительным для python 2.x и python 3.x из itertools import ifilterfalse как filterfalse   из itertools импортировать filterfalse

который работает точно так же , как генератор filter , но сохраняет только те элементы , которые являются False :

# Usage without function (None):
list(filterfalse(None, [1, 0, 2, [], '', 'a']))  # discards 1, 2, 'a' 
# Out: [0, [], '']
 
# Usage with function
names = ['Fred', 'Wilma', 'Barney']

def long_name(name):
    return len(name) > 5

list(filterfalse(long_name, names))
# Out: ['Fred', 'Wilma']
 
# Short-circuit useage with next:
car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
def find_something_smaller_than(name_value_tuple):
    print('Check {0}, {1}$'.format(*name_value_tuple)
    return name_value_tuple[1] < 100
next(filterfalse(find_something_smaller_than, car_shop))
# Print: Check Toyota, 1000$
# Out: ('Toyota', 1000)
 
# Using an equivalent generator:
car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
generator = (car for car in car_shop if not car[1] < 100)
next(generator)

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.