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

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

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

Розглянемо приклади списків у Python:

# Список, що містить елементи одного типу даних - рядки
colors = ['Червоний', 'Помаранчевий', 'Жовтий', 'Зелений', 'Синій', 'Індиго', 'Фіолетовий']

# Список, що поєднує різні типи даних
movies = ['Трансформери', 2012, 'Месники', 300]

# Список із дублікатами
users = ['Іван', 'Марія', 'Єлизавета', 'Іван']

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

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

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

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

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

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

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

Орієнтування на конкретні підмножини даних спрощує обробку та аналіз, роблячи їх ефективнішими, швидшими та точнішими.

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

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

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

Синтаксис функції filter() виглядає так:

filter(function, iterable)

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

iterable – це ітерований об’єкт, який підлягає фільтрації, наприклад, список.

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

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

Розглянемо приклад, де відфільтровується список, щоб вибрати числа, менші за 50:

# Список чисел
numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]

# Функція, що визначає умову фільтрації
def is_less_than_50(num):
   if num < 50:
      return True
   else:
      return False

# Використовуємо list() для створення списку з результату filter()
filtered_numbers = list(filter(is_less_than_50, numbers))
print(filtered_numbers)

Результат виконання цього коду:

[15, 46, 24, 37]

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

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

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

for item in iterable:
    # Блок коду, що виконується для кожного елемента

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

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

Для фільтрації списку за допомогою циклу 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() використовується для додавання відповідного числа до списку 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.

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

Синтаксис генератора списку виглядає так:

new_list = [expression for element in iterable if condition]

new_list – новий список з елементами, доданими генератором списку.

expression – операція, що застосовується до кожного елемента iterable.

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

iterable – ітерований об’єкт, з якого вибираються елементи.

if condition – необов’язкова частина, де можна додати умову фільтрації, щоб додати тільки ті елементи, що їй задовольняють.

Розглянемо приклад фільтрації списку літер для вибору тих, яких немає у списку голосних, використовуючи генератор списку:

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

# генератор списку
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 з прикладами.