Як правильно відфільтрувати список у Python, щоб отримати більше від ваших даних

У Python одним із найпопулярніших способів зберігання послідовних або впорядкованих даних є використання списків. Список у Python — це впорядкована змінна вбудована структура даних, яка використовується для зберігання колекції даних. Елементи, збережені в списку, індексуються, починаючи з нуля, і користувачі можуть змінювати вміст списку після його створення.

Той факт, що елементи в списку проіндексовані, дозволяє зберігати повторювані елементи в списку. Списки в Python також можуть містити елементи різних типів даних. Елементи в списку відокремлюються комами та беруться в квадратні дужки.

Ось приклади списків у Python:

# A list containing one data type - String
colors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']

# A list containing multiple data types
movies = ['Transformers', 2012, 'Avengers', 300]

# A list with duplicate values
users = ['John', 'Mary', 'Elizabeth', 'John']

Списки — це дуже універсальна структура даних, і ви можете виконувати багато операцій над даними, що зберігаються в списках. Однією з поширених і корисних операцій зі списками є фільтрація даних, що зберігаються в списку.

Чому фільтрація списків важлива

Фільтрування списку означає вилучення певних підмножин даних, які відповідають заданим критеріям. Наприклад, нас можуть цікавити лише парні числа у списку, що містить числа від 1 до 10. Щоб отримати такі дані зі списку, все, що нам потрібно зробити, це відфільтрувати список, щоб отримати числа, які точно діляться на два.

Фільтрування особливо корисне під час маніпулювання та аналізу даних, оскільки воно дозволяє видаляти небажані елементи зі списків, створювати нові списки, що містять елементи, які відповідають заданим критеріям, і витягувати дані, які відповідають певним умовам.

Деякі реальні програми фільтрації списків включають:

  • Перевірка даних – під час роботи зі списком ви можете працювати лише з даними, які відповідають певним критеріям. Наприклад, у списку користувачів вас можуть зацікавити користувачі з іменем і прізвищем. Фільтрування може дозволити вам перевірити та підтвердити дані в списку перед його обробкою. Таким чином ви уникаєте роботи з даними, які не відповідають вашим вимогам.
  • Очищення даних – оскільки списки можуть зберігати різноманітні типи даних, часто трапляється, що списки містять небажані дані, які вас не цікавлять. Наприклад, у списку, що містить імена, вас можуть не цікавити числові значення в список. За допомогою фільтрації ви можете видалити непотрібні дані.
  • Аналіз даних. Фільтрування даних є особливо корисним під час аналізу даних, оскільки дозволяє зосередитися на певних підмножинах даних, що дає змогу легко визначати закономірності та тенденції. Наприклад, у списку студентів ви можете відфільтрувати студентів і студенток і використовувати результат для аналізу даних. Ви навіть можете фільтрувати за віком, місцезнаходженням і класом. Це дозволяє зробити більш корисні висновки з конкретних підмножин даних у списку
  Чи варто використовувати Hubitat для автоматизації вашого розумного дому?

Фільтрування списків є дуже корисною функцією, оскільки вона дає вам контроль над даними, що зберігаються в списку, дозволяючи вам працювати лише з даними, які вас цікавлять.

Націлювання на конкретні підмножини даних, що зберігаються в списку, є дуже корисним, оскільки воно спрощує обробку та аналіз даних, роблячи процеси кращими, швидшими та точнішими.

Використання функції filter().

Функція filter() — це вбудована функція Python, яка може використовуватися для повторення ітераційного елемента, такого як список, кортежі, набір або словник, і вилучення елементів у ітераційному об’єкті, які задовольняють заданій умові.

Iterable у Python — це об’єкт, який може циклічно переглядати його елементи один за одним. Ітерація через iterable повертає елементи в iterable по одному.

Синтаксис функції фільтра такий:

filter(function, iterable)

функція – функція Python, яка містить умову фільтрації

iterable – ітерований, який буде відфільтрований. У цьому випадку ми будемо використовувати список.

Функція filter() бере передану функцію та застосовує її до кожного елемента переданого ітератора, перевіряючи умову фільтрації щодо елемента. Якщо елемент задовольняє умову, тобто повертає логічне значення true, яке буде вибрано функцією filter(). Якщо він не задовольняє умову, елемент не вибирається.

Функція filter() повертає ітерацію з елементами, які пройшли умову фільтрації. Ви можете створити новий список, що містить елементи, які пройшли умову фільтрації, використовуючи функцію list().

Щоб побачити функцію filter() у дії, розгляньте список нижче, який фільтрується для вибору чисел, менших за 50:

#A list of numbers
numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]

# function containing the filtering condition
def is_even(num):
   if num < 50:
      return True
   else:
      return False

# the function list() is used to create a list from the iterable
# returned by the filter() function
filtered_numbers = list(filter(is_even, numbers))
print(filtered_numbers)

Наведений вище код друкує такий результат:

[15, 46, 24, 37]

Використання циклу for

У Python цикл for — це оператор потоку керування, який використовується для перебору послідовних структур даних, таких як список, кортежі, рядки та масиви. Цикл for багаторазово виконує блок коду для кожного елемента в послідовності.

  Порівняльний посібник щодо консенсусних алгоритмів блокчейну: PoW проти PoS

Загальний синтаксис для циклу for такий:

for item in iterable:
    # Block of code to be executed for each item in the iterabele

item – змінна, що представляє поточний елемент, що обробляється в ітерації циклу

iterable – послідовність, над якою виконується цикл for. У цьому випадку список

Щоб відфільтрувати список за допомогою циклу for, нам потрібно буде передати нашу умову фільтрації в розділ для блоку коду, який буде виконано. Таким чином, кожен елемент буде оцінено, щоб побачити, чи задовольняє він задану умову.

Під час використання циклу for для фільтрації списку вам також потрібно створити порожній список, куди ви додаватимете значення, які відповідають вашій умові фільтрації.

Щоб побачити це в дії, давайте відфільтруємо список чисел, щоб отримати числа менше 50 за допомогою циклу for:

numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]

filtered_numbers = []

for num in numbers:
    if num < 50:
        # append() used to add a number that passes the condition
        # into filtered_numbers.
        filtered_numbers.append(num)

print(filtered_numbers)

Наведений вище код друкує такий результат:

[15, 46, 24, 37]

Використання іншого списку

Ви можете відфільтрувати список за допомогою іншого, перевіривши, чи відображається елемент зі списку, який ви хочете відфільтрувати, в іншому списку. Наприклад, розглянемо наступні два списки

letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']

vowels = ['a', 'e', 'i', 'o', 'u']

У списку, який називається буквами вище, ми можемо визначити, які елементи в списку не є голосними, перевіривши, чи з’являється цей елемент у списку голосних чи ні. Якщо елемент не відображається у списку голосних, це означає, що це не голосна.

Таким чином ми можемо отримати всі символи в літерах, які не є голосними. Для цього виконайте наступний код:

letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']

not_vowel = []

for letter in letters:
    if letter not in vowels:
        not_vowel.append(letter)
print(not_vowel)

Наведений вище код друкує наступний вихід, який містить символи в літерах, які не є голосними.

['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']

Використання розуміння списку

У Python розуміння списку пропонує коротший, лаконічніший і чистіший синтаксис для створення нового списку з існуючого. Розуміння списків має можливість скоротити кілька рядків коду, які використовуються для створення нового списку з іншого списку за допомогою циклу for, до одного рядка.

  Як підвищити FPS в PUGB [Playerunknown’s Battlegrounds]

Це пояснюється тим, що під час використання розуміння списку ви визначаєте та додаєте елементи до нового списку в одному рядку.

Синтаксис для розуміння списку такий:

new_list = [expression for element in iterable if condition]

new_list – новий список, що містить елементи, додані розумінням списку

вираз – операція, яка буде застосована до кожного елемента iterable

item – ім’я змінної, що представляє поточний активний елемент у ітерації

iterable – iterable, з якого буде вибрано елементи.

якщо умова – необов’язкова частина, де умова може бути додана до елементів фільтра, щоб додати лише ті, які задовольняють задану умову, до нового списку, який створюється.

Щоб побачити розуміння списку в дії та наскільки воно може спростити процес фільтрації та створення нового списку, ми використаємо список букв і голосних, щоб відфільтрувати елементи зі списку літер, яких немає в списку голосних. Для цього виконайте наступний код:

letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']

# list comprehension
not_vowel = [letter for letter in letters if letter not in vowels]
print(not_vowel)

Вихід коду вище показано нижче:

['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']

Результат подібний до попереднього прикладу, у якому використовувався цикл for для фільтрації списку за допомогою іншого списку. Однак для досягнення того самого результату використовується менше рядків коду.

Висновок

Працюючи з даними в Python, типовою операцією, яку ви зобов’язані виконувати, є фільтрація даних із ітерованого елемента, такого як список. Це дуже корисний крок в аналізі та обробці даних, оскільки він дає змогу працювати лише з даними, які стосуються операції чи обробки, що виконується.

Дуже популярною послідовною структурою даних у Python є список. Якщо ви працюєте зі списком і вам потрібно його відфільтрувати, скористайтеся будь-яким із методів, описаних у статті.

Ви також можете прочитати про те, як використовувати лямбда-функції в Python із прикладами.