Функції 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(). Сподіваюся, що цей матеріал був користним для вас! Дякую за увагу!

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

Нічний читач

171Прочитань
17Автори
6Читачі
На Друкарні з 14 липня

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

  • Функції max() та min() у Python

    Всіх вітаю! У цій невеличкій статті ми розберемо вбудовані функції min() та max(). Насправді дуже прості суті цих функцій, тож оглянемо кожну з них по черзі.

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

    Програмування
  • Функції reversed() та map() у Python

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

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

    Програмування
  • Функції all() та any() у Python

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

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

    It

Вам також сподобається

  • Що таке автентифікація Kerberos?

    Протокол автентифікації Kerberos версії 5 забезпечує механізм автентифікації — і взаємної автентифікації — між клієнтом і сервером або між одним сервером та іншим сервером.

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

    Робота З Windows
  • Java. ReadWriteLock

    Для цього використовується ThreadLocalHoldCounter, яка відображає потоки на їхні..

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

    Java

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

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

Вам також сподобається

  • Що таке автентифікація Kerberos?

    Протокол автентифікації Kerberos версії 5 забезпечує механізм автентифікації — і взаємної автентифікації — між клієнтом і сервером або між одним сервером та іншим сервером.

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

    Робота З Windows
  • Java. ReadWriteLock

    Для цього використовується ThreadLocalHoldCounter, яка відображає потоки на їхні..

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

    Java