Рубрики
Без рубрики

Python Filter ()

Встроенная функция Python Filter () используется для отфильтровывания элементов, которые проходят состояние фильтрации. Требуется два аргумента: функция и итерация. Функция назначает логическое значение каждому элементу в том, чтобы проверить, пройдет ли элемент фильтра или нет. Возвращает итератор с элементами, которые проходят … Python Filter () Подробнее »

Автор оригинала: Chris.

Встроенный Python Фильтр () Функция используется для отфильтровывания элементов, которые передают состояние фильтрации. Требуется два аргумента: Функция и ИТЕРИТЕЛЬНО Отказ Функция Назначает логическое значение каждому элементу в ИТЕРИТЕЛЬНО Чтобы проверить, пройдет ли элемент фильтр или нет. Возвращает итератор с элементами, которые передают условие фильтрации.

Фильтр () Метод имеет следующий синтаксис:

filter(function, iterable)
функция Назначает логическое значение каждому элементу в том, чтобы проверить, пройдет элемент фильтра или нет.
считать От которого можно использовать элементы для фильтрации элементов.
Возвращаемое значение Итератор фильтрованных элементов, которые проходят тест, представляемый аргументом функций.

Давайте погрузимся в некоторые примеры Фильтр () Функция:

Примеры использования: фильтр () списка Python

Фильтр (функция, утечка) Функция принимает функцию в качестве ввода, которая принимает аргумент (элемент списка) и возвращает логическое значение, должен ли этот элемент списка передавать фильтр. Все элементы, которые проходят фильтр, возвращаются как новый ИТЕРИТЕЛЬНО объект (объект фильтра).

Вы можете использовать лямбда Заявление о функциях для создания функции вправо, где вы передаете его как аргумент. Синтаксис функции лямбда – это лямбда x: выражение, и это означает, что вы используете X в качестве аргумента ввода, и вы возвращаете выражение в результате (это может или не может использовать X, чтобы определиться с возвратом). Для получения дополнительной информации см. Мой Подробная статья в блоге о функции лямбда Отказ

lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = filter(lambda x: x<8, lst)
print(list(small))


# Filter all even elements
even = filter(lambda x: x%2==0, lst)
print(list(even))

# Filter all odd elements
odd = filter(lambda x: x%2, lst)
print(list(odd))

Вывод:

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]

Фильтр () Функция возвращает объект фильтра, который ИТЕРИТЕЛЬНО Отказ Чтобы преобразовать его в список, вы используете Список (...) конструктор.

Связанная статья:

  • Как фильтровать с помощью функции лямбда

Видео: Как отфильтровать список в Python?

Как вы можете отфильтровать список в Python, используя произвольное состояние? Следующее видео будет направлять вас через разные варианты:

Альтернатива: фильтр с пониманием списка

Самый питонический способ фильтрации списка – на мой взгляд – это Понимание списка Заявление [X для X в списке, если состояние] Отказ Вы можете заменить условие с любой функцией х Вы хотели бы использовать в качестве состояния фильтрации.

Например, если вы хотите отфильтровать все элементы, которые меньше, скажем, 10, вы бы использовали оператор понимания списка [X для X в списке, если X <10] Чтобы создать новый список со всеми элементами списка, которые меньше 10.

Вот три примера фильтрации списка:

  • Получить элементы меньше восьми: [X для X в LST, если X <8] Отказ
  • Получить даже элементы: [X для X в LST, если] Отказ
  • Получить нечетные элементы: [X для X в LST, если x% 2] Отказ
lst = [8, 2, 6, 4, 3, 1]

# Filter all elements <8
small = [x for x in lst if x<8]
print(small)


# Filter all even elements
even = [x for x in lst if x%2==0]
print(even)

# Filter all odd elements
odd = [x for x in lst if x%2]
print(odd)

Вывод:

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]

Это самый эффективный способ фильтрации списка, и это также самый питон один. Если вы ищете альтернативы, хотя, продолжайте читать, потому что я объясню вам каждый нюанс списков фильтрации в Python в этом всеобъемлющем руководстве.

Список фильтра Python эффективно: Filter () VS Появление списка

[SPOILER], который быстрее отфильтровать список: FILTER () VS Появление списка? Для больших списков с одним миллионом элементов фильтрация списков с пониманием списка на 40% быстрее, чем встроенный фильтр() метод.

Чтобы ответить на это Вопрос:| Я написал короткий скрипт, который проверяет производительность выполнения фильтрации крупных списков увеличения размеров с использованием Фильтр () и методы понимания списка.

Мой тезис состоит в том, что метод понимания списка должен быть немного быстрее для размеров более широкого списка, поскольку оно использует эффективную реализацию CPYPHON из списка и не нужно вызывать дополнительную функцию.

Я использовал свою ноутбук с процессором INTEL (R) CORE (TM) I7-8565U 1,8 ГГц (с Turbo Boost до 4,6 ГГц) и 8 ГБ ОЗУ.

Затем я создал 100 списков с обоими способами с размерами, начиная от 10 000 элементов до 1000 000 элементов. В качестве элементов я просто увеличил целочисленные числа на один, начиная с 0.

Вот код, который я использовал для измерения и сюжета результатов: какой метод быстрее – Фильтр () или список пометков?

import time


# Compare runtime of both methods
list_sizes = [i * 10000 for i in range(100)]
filter_runtimes = []
list_comp_runtimes = []

for size in list_sizes:

    lst = list(range(size))
    
    # Get time stamps
    time_0 = time.time()
    list(filter(lambda x: x%2, lst))
    time_1 = time.time()
    [x for x in lst if x%2]
    time_2 = time.time()

    # Calculate runtimes
    filter_runtimes.append((size, time_1 - time_0))
    list_comp_runtimes.append((size, time_2 - time_1))


# Plot everything
import matplotlib.pyplot as plt
import numpy as np

f_r = np.array(filter_runtimes)
l_r = np.array(list_comp_runtimes)

print(filter_runtimes)
print(list_comp_runtimes)

plt.plot(f_r[:,0], f_r[:,1], label='filter()')
plt.plot(l_r[:,0], l_r[:,1], label='list comprehension')

plt.xlabel('list size')
plt.ylabel('runtime (seconds)')

plt.legend()
plt.savefig('filter_list_comp.jpg')
plt.show()

Код сравнивает runtimes of Фильтр () Функция и вариант понимания списка для фильтрации списка. Обратите внимание, что Фильтр () Функция Возвращает объект фильтра, поэтому вам нужно преобразовать его в список, используя список() конструктор.

Вот полученный график, который сравнивает время выполнения двух методов. На оси X вы можете увидеть размер списка от 0 до 1 000 000 элементов. На оси Y вы можете увидеть время выполнения в секундах, необходимых для выполнения соответствующих функций.

Полученный график показывает, что оба метода чрезвычайно быстры для нескольких десятков тысяч элементов. На самом деле, они настолько быстро, что Время () Функция модуль времени не может захватить прошедшее время.

Но, поскольку вы увеличиваете размер списков до сотен тысяч элементов, метод понимания списка начинает побеждать:

Для больших списков с одним миллионом элементов фильтрация списков с пониманием списка на 40% быстрее, чем встроенный фильтр() метод.

Причина является эффективной реализацией заявления о понимании списка. Интересное наблюдение – это следующее. Если вы не преобразуете функцию фильтра в список, вы получаете следующий результат:

Внезапно Фильтр () Функция имеет постоянную среду выполнения близко к 0 секунд – независимо от того, сколько элементов в списке. Почему это происходит?

Объяснение простое: Функция фильтра возвращает iTerator, а не список. Итератор не должен вычислять один элемент до тех пор, пока он не будет запрашивать для вычисления Далее () элемент. Итак, Фильтр () Функция вычисляет следующий элемент только в том случае, если это необходимо для этого. Только если вы преобразуете его в список, он должен вычислять все значения. В противном случае это на самом деле не вычисляет одно значение заранее.

Похожие видео: Фильтр () в Python

Статьи по Теме:

  • Как отфильтровать список списков Python?
  • Список понимания – список списков Python
  • Фильтр () VS Появление списка
  • Вложенный список понимание
  • Окончательное руководство по спискам Python
  • Список понимания

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-filter/”