Документация по Python. Теоретические материалы, и практические задачи

Python filter

Метод Python filter извлекает элементы, и перечисляемых объектов, таких как списки, кортежи и.т.д. Для которых возвращается True в случае успеха, и False в случае неудачи.

                    
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Возвращаем True если значение четное
def check_even(number):
    if number % 2 == 0:
          return True  

    return False

# Извлекаем элементы, для которых функция check_even() возвращает True
even_numbers_iterator = filter(check_even, numbers)

# конвертируем в список
even_numbers = list(even_numbers_iterator)

print(even_numbers)

# Результат: [2, 4, 6, 8, 10]

Метод Python filter() принимает два аргумента:

Ниже рассмотрим пример использования метода filter()

Пример 1. Как работает метод filter()?

                    
letters = ['a', 'b', 'd', 'e', 'i', 'j', 'o']

# Функция вернет нам True, если буква является гласной
def filter_vowels(letter):
    vowels = ['a', 'e', 'i', 'o', 'u']
    return True if letter in vowels else False

filtered_vowels = filter(filter_vowels, letters)

# Конвертируем в кортеж
vowels = tuple(filtered_vowels)
print(vowels)

#Результат
('a', 'e', 'i', 'o', 'u')

В данном случае, метод filter() извлекает из списка только гласные буквы из letters.

  • Каждый элемент из списка letters передается функции filter_vowels()
  • В случае, если filter_vowels() возвращает нам True, этот элемент извлекается из списка, в противном случае, элемент будет отфильтрован

Конечно, задачи такого рода, можно решать и с помощью цикла, но использование функции filter() будет намного правильнее.

Пример 2. Лямбда функция внутри filter()

                    
numbers = [1, 2, 3, 4, 5, 6, 7]

# Лямбда вернет нам True для четных чисел
even_numbers_iterator = filter(lambda x: (x%2 == 0), numbers)

# преобразовываем в список
even_numbers = list(even_numbers_iterator)

print(even_numbers)
#Результат
[2, 4, 6]
  • В данном случае, мы передаем наш список лямбда функции, находящейся внутри внутри метода filter().
  • Функция возвращает нам True для четных чисел, а метод filter() возращает нам последовательность содержащий только четные числа

Пример 3. Использование None в качестве функции внутри метода filter()

                    
# Смешанные элементы в списке
random_list = [1, 'a', 0, False, True, '0']

filtered_iterator = filter(None, random_list)

#Преобразовываем список
filtered_list = list(filtered_iterator)

print(filtered_list)

#Результат
[1, 'a', True, '0']

В случае когда None используется в качестве первого аргумента метода filter(), извлекаются все элементы являющимися истинными, то есть имеющими значение True.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *