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

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

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

Здравствуйте. В сегодняшней статье мы рассмотрим как отфильтровать данные из последовательности в Python. В качестве последовательности здесь используется список list.

Постановка задачи

Имеется последовательность чисел в списке Python. Необходимо отфильтровать список или
уменьшить значения в нем, в соответствии с некоторым критерием.

Решение

Наиболее легким путем фильтрации данных из списка будет использование генератора списков.



mylist = [1, 4, -5, 10, -7, 2, 3, -1]





print([n for n in mylist if n > 0])



print([n for n in mylist if n < 0])



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





pos = (n for n in mylist if n > 0)



print(pos)

# <generator object <genexpr> at 0x000001987F0C5FC0> 



for x in pos:

  print(x)



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





values = ['1', '2', '-3', '-', '4', 'N/A', '5']



def is_int(val):

 try:

   x = int(val)

   return True

 except ValueError:

   return False



ivals = list(filter(is_int, values))



print(ivals)



Функция filter() создает итератор, поэтому, если вы хотите создать список результатов, убедитесь, что вы также
используйте list(), как показано.

Таким образом, генератор списка и генераторные выражения в Python, часто являются самыми простыми и понятными,
способами фильтрации простых данных. Они также обладают дополнительной силой для преобразования
данных.

Источник

НЕТ КОММЕНТАРИЕВ

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