Друкарня від WE.UA

Функції frozenset() та filter() у Python

Всіх вітаю! Сьогодні ми будемо розглядати вбудовані функції frozenset() та filter(). Будемо розбирати кожгу функцію окремо на основі прикладів.

Функція frozenset()

Функція frozenset() дозволяє створювати так звану “заморожену множину”, яка не піддається жодним змінам. Це і є її головна особливість. Ось приклад застосування цієї функції:

random_numbers = [25, 99, 64, 87, 3]
frozen_set = frozenset(random_numbers)

print("Frozen set:", frozen_tuple)
Frozen set: frozenset({64, 99, 3, 87, 25})

Тепер спробуємо змінити заморожену множину:

random_numbers = [25, 99, 64, 87, 14, 3]
frozen_set = frozenset(random_numbers)

print("Before changes:", frozen_set)

frozen_set[0] = 40
print("After changes: ", frozen_set)
frozen_set[0] = 40
TypeError: 'frozenset' object does not support item assignment

У підсумку отримали помилку, так як змінити таку множину не можливо. Як приклад наведемо код, де ми змінили той самий нульовий елемент, але вже у списку random_numbers:

random_numbers = [25, 99, 64, 87, 14, 3]
print("Before changes:", random_numbers)

random_numbers[0] = 40
print("After changes: ", random_numbers)
Before changes: [25, 99, 64, 87, 14, 3]
After changes:  [40, 99, 64, 87, 14, 3]

Як бачимо, зміна простого списку пройшла успішно.

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

random_numbers = [25, 99, 64, 87, 3, 99]
frozen_set = frozenset(random_numbers)

print("Frozen set:", frozen_set)
Frozen set: frozenset({64, 99, 3, 87, 25})

Як бачимо, ми додали ще один елемент — число 99, воно ніяк не відобразилося двічі і сама заморожена множина жодним чином не змінилася.

Також заморожену множину можна вказувати як значення словника:

random_numbers = [25, 99, 64, 87, 3, 99]
frozen_numbers = frozenset(random_numbers)

random_words = ["Go", "Stay", "Land", "Backyard", "Convince"]
frozen_words = frozenset(random_words)

cold_dict = {
    "Frozen numbers": frozen_numbers,
    "Frozen strings": frozen_words
}

print(cold_dict)
{'Frozen numbers': frozenset({64, 99, 3, 87, 25}), 'Frozen strings': frozenset({'Land', 'Stay', 'Convince', 'Backyard', 'Go'})}

Або як елемент у іншій множині:

random_numbers = [25, 99, 64, 87, 3, 99]
frozen_numbers = frozenset(random_numbers)

random_words = ["Go", "Stay", "Land", "Backyard", "Convince"]
frozen_words = frozenset(random_words)

common_set = {frozen_numbers, frozen_words}
print(common_set)
{frozenset({'Stay', 'Backyard', 'Go', 'Land', 'Convince'}), frozenset({64, 99, 3, 87, 25})}

Причому саме множини ми не можемо використовувати усередині інших множин, бо отримуємо помилку:

random_numbers = {25, 99, 64, 87, 3, 99}
random_words = {"Go", "Stay", "Land", "Backyard", "Convince"}

common_set = {random_numbers, random_words}
print(common_set)
common_set = {random_numbers, random_words}
TypeError: unhashable type: 'set'

Але от у словниках маємо повне право:

random_numbers = {25, 99, 64, 87, 3, 99}
random_words = {"Go", "Stay", "Land", "Backyard", "Convince"}

cold_dict = {
    "Frozen numbers": random_numbers,
    "Frozen strings": random_words
}

print(cold_dict)
{'Frozen numbers': {64, 3, 99, 87, 25}, 'Frozen strings': {'Land', 'Go', 'Convince', 'Backyard', 'Stay'}}

На цьому із frozenset() ми закінчимо.

Функція filter()

Функція filter() приймає два параметри: функцію, за якою ми зможемо фільтрувати та ітерований тип даних (Наприклад, список, кортеж, множина). Ось приклад, коли ми фільтруємо словник так, щоб у ньому не було цілих значень:

results = [0.2, 9.23, 3.65, 0.004, 8, 5, 1]


def int_checker(number):
    if isinstance(number, int) is False:
        return results


filtered_results = filter(int_checker, results)
print(list(filtered_results))
[0.2, 9.23, 3.65, 0.004]

Ось так і працює функція filter(). Тепер давайте подивимося на ще один приклад, де ми фільтруємо список таким чином, щоб у ньому залишилися тільки люди з іменами, які починаються на K. Ось такий приклад:

names = ["Kate Collins", "Mark Harrow", "Kyle Osborn", "Dave Mitchell", "Andy Green", "Larry Long", "James Field"]


def names_detector(first_letter):
    if first_letter[0] == "K":
        return names


filtered_results = filter(names_detector, names)
print(list(filtered_results))
['Kate Collins', 'Kyle Osborn']

Тобто отримали бажаний результат.

Висновок

У цій статті ми навчилися використовувати та зрозуміли сенс функцій frozenset() та filter(). Сподіваюся, що цей матеріал був користним для вас! Дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

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

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader

Нічний читач

392Прочитань
21Автори
11Читачі
Підтримати
На Друкарні з 14 липня

Більше від автора

  • Гарне форматування з pprint

    Всіх вітаю! Сьогодні ми поговоримо про те, як зробити вивід програми гарним та зручним завдяки бібліотеці pprint у Python. Крім цього ми розберемо кожний параметр функції pprint() та подивомося на нього у дії.

    Теми цього довгочиту:

    Програмування
  • Скалярний, векторний та мішаний добутки у Python

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

    Теми цього довгочиту:

    Програмування
  • Обчислення статистичних показників даних про прогноз погоди у Python

    Всіх вітаю! У цьому матеріалі ми будемо візуалізувати значення максимальних та мінімальних прогнозованих значень температури на січень через бібліотеку plotly. Крім того, ми проведемо аналіз статистичних показників цих даних за допомогою вбудованого модуля statistics.

    Теми цього довгочиту:

    Програмування

Це також може зацікавити:

  • Fluent wait або впевнене очікування та як його їсти

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

    Теми цього довгочиту:

    It
  • 50 онлайн книг для вивчення Java

    Ви готові розпочати подорож до володіння Java? Тоді увага – ми створили підбірку з 50 видатних онлайн-книг англійською, які допоможуть вам освоїти кожний аспект програмування на Java!

    Теми цього довгочиту:

    Java
  • Як перемагати на хакатонах

    Розкажу про хакатони, у яких я брав участь з 2015 року. Ідеї, презентації, перемоги, висновки, смішні ситуації та меми

    Теми цього довгочиту:

    Hackathon

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Fluent wait або впевнене очікування та як його їсти

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

    Теми цього довгочиту:

    It
  • 50 онлайн книг для вивчення Java

    Ви готові розпочати подорож до володіння Java? Тоді увага – ми створили підбірку з 50 видатних онлайн-книг англійською, які допоможуть вам освоїти кожний аспект програмування на Java!

    Теми цього довгочиту:

    Java
  • Як перемагати на хакатонах

    Розкажу про хакатони, у яких я брав участь з 2015 року. Ідеї, презентації, перемоги, висновки, смішні ситуації та меми

    Теми цього довгочиту:

    Hackathon