Фильтрация элементов последовательности в 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, часто являются самыми простыми и понятными, способами фильтрации простых данных. Они также обладают дополнительной силой для преобразования данных.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.