Использование множеств (`set`) в Python

Множество — это математический объект, представляющий собой совокупность уникальных элементов, неупорядоченных по какому-либо принципу. Элементы в множестве не повторяются, и порядок их следования не имеет значения.

Пример множества из реальной жизни:

Допустим, у нас есть множество «студенты в университете». В этом множестве каждый студент представляет собой уникальный элемент. Порядок, в котором они упоминаются, не имеет значения, и каждый студент уникален. Например:

{Анна, Боб, Карл, Диана, Боб}

В данном случае, элемент «Боб» встречается всего один раз, поскольку в множестве элементы уникальны.

Неупорядоченная коллекция уникальных элементов: В Python, множество представляет собой структуру данных, которая не обладает порядком.

Элементы множества не имеют индексов, и к ним можно обращаться только по значению.

Уникальность элементов означает, что в множестве не может быть повторяющихся значений.

Содержание

Представление множества в Python.

Множество создается с использованием фигурных скобок: {элемент1, элемент2, ...}.

Пример: my_set = {1, 2, 3}

Пример использования множеств на конкретных задачах

Уникальные элементы в списке заказов:

Проблема:

  • У нас есть список заказов, и нам необходимо выделить уникальные товары, которые заказывались.

Решение:

  • Создаем множество, добавляем в него все товары из списка заказов. Таким образом, получаем уникальные элементы.
orders = ["товар1", "товар2", "товар1", "товар3", "товар2"]
unique_items = set(orders)

Поиск общих интересов между пользователями в социальной сети:

Проблема:

  • Нам нужно определить общие интересы между пользователями в социальной сети.

Решение:

  • Используем множества для представления интересов каждого пользователя. Затем, для поиска общих интересов, применяем операцию пересечения множеств.
user1_interests = {"фильмы", "музыка", "спорт"}
user2_interests = {"музыка", "книги", "спорт"}

common_interests = user1_interests.intersection(user2_interests)

Создание множеств в Python:

  1. Вручную. Мы можем создавать множества, указывая элементы в фигурных скобках.
    manual_set = {1, 2, 3, 4}
    
  2. С использованием функции set(). Функция set() позволяет создавать множества из других итерируемых объектов, таких как списки или строки.
    list_set = set([1, 2, 3, 4])
    string_set = set("hello")
    
  3. С использованием генератора множеств. Генераторы множеств позволяют создавать множества с использованием выражений и циклов.
    set_generator = {x for x in range(1, 5)}
    

Как создать пустое множество?

В Python, {} используется для создания пустого словаря, а не пустого множества.

Для создания пустого множества используется функция set().

Примеры создания множеств

# Создание множеств вручную
manual_set = {1, 2, 3, 4}
print(manual_set)  # Вывод: {1, 2, 3, 4}

# Создание множества с использованием функции set()
list_set = set([1, 2, 3, 4])
string_set = set("hello")
print(list_set)     # Вывод: {1, 2, 3, 4}
print(string_set)   # Вывод: {'e', 'l', 'h', 'o'}

# Создание множества с использованием генератора множеств
set_generator = {x for x in range(1, 5)}
print(set_generator)  # Вывод: {1, 2, 3, 4}

# Попытка создания пустого множества с использованием {}
# Почему нельзя использовать {} для создания пустого множества?
# Потому что это создаст пустой словарь, а не множество
empty_set = set()    # Правильный способ создания пустого множества
empty_dict = {}      # Это будет пустым словарем, не множеством

Задание 1: Создайте множество из чисел от 1 до 5 включительно с использованием генератора.

Задание 2: Создайте множество из первых пяти букв английского алфавита с использованием set().

Задание 3: Создайте множество из квадратов чисел от 1 до 5 с использованием генератора.

Задание 4: Создайте множество из четных чисел от 2 до 10 включительно с использованием ручного создания.

Задание 5: Создайте множество, содержащее элементы общие для двух множеств (1, 2, 3) и (3, 4, 5) с использованием set().

Задание 6: Создайте множество из уникальных символов в строке «hello» с использованием ручного создания.

Задание 7: Создайте множество из букв в слове «programming» без повторений с использованием генератора.

Задание 8: Создайте множество из кубов нечетных чисел от 1 до 10 с использованием генератора и фильтра.

Задание 9: Создайте множество из квадратов чисел от 1 до 10, исключив числа, делящиеся на 3, с использованием генератора и фильтра.

Решения:
# Задание 1: Создайте множество из чисел от 1 до 5 включительно с использованием генератора.
set_1 = {x for x in range(1, 6)}
# Вывод: {1, 2, 3, 4, 5}
print(set_1)

# Задание 2: Создайте множество из первых пяти букв английского алфавита с использованием set().
set_2 = set(['a', 'b', 'c', 'd', 'e'])
# Вывод: {'a', 'b', 'c', 'd', 'e'}
print(set_2)

# Задание 3: Создайте множество из квадратов чисел от 1 до 5 с использованием генератора.
set_3 = {x ** 2 for x in range(1, 6)}
# Вывод: {1, 4, 9, 16, 25}
print(set_3)

# Задание 4: Создайте множество из четных чисел от 2 до 10 включительно с использованием ручного создания.
set_4 = {2, 4, 6, 8, 10}
# Вывод: {2, 4, 6, 8, 10}
print(set_4)

# Задание 5: Создайте множество, содержащее элементы общие для двух множеств (1, 2, 3) и (3, 4, 5) с использованием set().
set_5 = {1, 2, 3}.intersection({3, 4, 5})
# Вывод: {3}
print(set_5)

# Задание 6: Создайте множество из уникальных символов в строке "hello" с использованием ручного создания.
set_6 = {'h', 'e', 'l', 'o'}
# Вывод: {'h', 'e', 'l', 'o'}
print(set_6)

# Задание 7: Создайте множество из букв в слове "programming" без повторений с использованием генератора.
set_7 = {char for char in "programming"}
# Вывод: {'p', 'r', 'o', 'g', 'a', 'm', 'i', 'n'}
print(set_7)

# Задание 8: Создайте множество из кубов нечетных чисел от 1 до 10 с использованием генератора и фильтра.
set_8 = {x ** 3 for x in range(1, 11) if x % 2 != 0}
# Вывод: {1, 27, 125, 343, 729}
print(set_8)

# Задание 9: Создайте множество из квадратов чисел от 1 до 10, исключив числа, делящиеся на 3, с использованием генератора и фильтра.
set_9 = {x ** 2 for x in range(1, 11) if x % 3 != 0}
# Вывод: {1, 4, 16, 25, 49, 64, 100}
print(set_9)


Операции над множествами и основные понятия теории множеств

операции над множествами

Операции над множествами:

1. Объединение (Union):

  • Объединение двух множеств включает все уникальные элементы из обоих множеств.

Пример: } A∪B={1,2,3,4,5}

2. Пересечение (Intersection):

  • Пересечение двух множеств включает только те элементы, которые присутствуют в обоих множествах.

Пример:

3. Разность (Difference):

  • Разность двух множеств включает все элементы первого множества, которые не присутствуют во втором множестве.

Пример:

4. Симметрическая разность (Symmetric Difference):

  • Симметрическая разность включает все элементы, которые присутствуют только в одном из множеств.

Пример:

5. Дополнение (Complement):

  • Дополнение множества A относительно универсального множества U включает все элементы U, которые не присутствуют в A.

Пример: U={4,5}

Что такое подмножества, надмножества, пустое множество?

Подмножество множества — это множество, все элементы которого также являются элементами другого множества, называемого «надмножеством».

Формально, множество A является подмножеством множества B, если каждый элемент A также принадлежит множеству B.

Математически, если каждый элемент из множества A также принадлежит множеству B, мы записываем это как или , где символ обозначает «является подмножеством» (включая возможность равенства), а символ  обозначает «является строгим подмножеством» (без равенства).

Пример: — множество A является подмножеством множества B, потому что все элементы A (1 и 2) также принадлежат множеству B.

Пустое множество (иногда также называемое нулевым множеством) — это множество, не содержащее ни одного элемента.

В математике пустое множество обозначается символом или .

Формально, для любого множества , пустое множество является его подмножеством:

Примеры:

  1. Пустое множество целых чисел:
  2. Пустое множество букв в слове «Python»:
  3. Пустое множество точек на плоскости:

Пустое множество играет важную роль в теории множеств и математике в целом, особенно в контексте определения операций над множествами, таких как объединение, пересечение и разность.

Операции над множествами в Python

  1. Объединение (|). Объединение двух множеств включает все уникальные элементы из обоих множеств.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    union_set = set1 | set2
    # Результат: {1, 2, 3, 4, 5}
    
  2. Пересечение (&). Пересечение двух множеств включает только те элементы, которые присутствуют в обоих множествах.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    intersection_set = set1 & set2
    # Результат: {3}
    
  3. Разность (-). Разность двух множеств включает все элементы первого множества, которые не присутствуют во втором множестве.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    difference_set = set1 - set2
    # Результат: {1, 2}
    
  4. Симметрическая разность (^). Симметрическая разность включает все элементы, которые присутствуют только в одном из множеств.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    symmetric_difference_set = set1 ^ set2
    # Результат: {1, 2, 4, 5}
    
  5. Проверка принадлежности (in). Оператор `in` позволяет проверить, принадлежит ли элемент множеству.
    set1 = {1, 2, 3}
    print(2 in set1)  # Вернет True
    
  6. Метод add(). Метод `add()` добавляет элемент в множество.
    set1 = {1, 2, 3}
    set1.add(4)
    # set1 теперь равно {1, 2, 3, 4}
    
  7. Метод discard() (и remove()). Метод `discard()` удаляет элемент из множества, если он присутствует. Метод `remove()` также удаляет элемент, но вызывает исключение, если элемент не найден.
    set1 = {1, 2, 3, 4}
    set1.discard(3)
    # set1 теперь равно {1, 2, 4}
    

Задания на закрепление

Задание 11: Создайте два множества, состоящих из чисел от 1 до 5 и от 3 до 7. Найдите их объединение.

Задание 12: Создайте множество из букв слова «Python». Добавьте в это множество букву «C». Найдите пересечение с множеством гласных.

Задание 13: Создайте множество, содержащее квадраты четных чисел от 1 до 10. Найдите симметрическую разность с множеством кубов нечетных чисел от 1 до 9.

Задание 14: Создайте множество, представляющее увлечения студента A, и множество увлечений студента B. Найдите, есть ли у них общие увлечения.

Задание 15: Создайте множество, представляющее категории товаров в магазине A, и множество категорий товаров в магазине B. Найдите общие категории.

Задание 16: Создайте множество из букв слова «programming». Удалите гласные из этого множества.

Задание 17: Создайте два множества, представляющих круги друзей у человека A и B. Найдите, у кого больше друзей.

Задание 18: Создайте множество, представляющее собой первые 10 простых чисел. Добавьте в него простые числа от 11 до 20.

Задание 19: Создайте множество, содержащее различные цвета, предпочтительные для студента A и студента B. Найдите пересечение этих множеств.

Задание 20: Создайте множество, представляющее собой уникальные слова в предложении. Добавьте в это множество слова из другого предложения. Найдите количество слов в итоговом множестве.

Решение
# Задание 11
set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}
union_result = set1 | set2
# Вывод: {1, 2, 3, 4, 5, 6, 7}

# Задание 12
word_set = set("Python")
word_set.add("C")
vowels_set = {'a', 'e', 'i', 'o', 'u'}
intersection_result = word_set & vowels_set
# Вывод: {'o'}

# Задание 13
even_squares = {x**2 for x in range(1, 11) if x % 2 == 0}
odd_cubes = {x**3 for x in range(1, 10) if x % 2 != 0}
symmetric_difference_result = even_squares ^ odd_cubes
# Вывод: {8, 64, 216, 512, 1000}

# Задание 14
student_a_hobbies = {'reading', 'coding', 'photography'}
student_b_hobbies = {'coding', 'gaming', 'cooking'}
common_hobbies = student_a_hobbies & student_b_hobbies
# Вывод: {'coding'}

# Задание 15
store_a_categories = {'electronics', 'clothing', 'books'}
store_b_categories = {'books', 'kitchen', 'toys'}
common_categories = store_a_categories & store_b_categories
# Вывод: {'books'}

# Задание 16
word_set_programming = set("programming")
vowels_removed = word_set_programming - {'a', 'e', 'i', 'o', 'u'}
# Вывод: {'p', 'r', 'g', 'm', 'n'}

# Задание 17
friends_a = {'Alice', 'Bob', 'Charlie'}
friends_b = {'Alice', 'David', 'Eva'}
more_friends = max(len(friends_a), len(friends_b))
# Вывод: 3

# Задание 18
prime_numbers_1_10 = {2, 3, 5, 7}
prime_numbers_11_20 = {11, 13, 17, 19}
prime_numbers_1_20 = prime_numbers_1_10 | prime_numbers_11_20
# Вывод: {2, 3, 5, 7, 11, 13, 17, 19}

# Задание 19
student_a_colors = {'red', 'green', 'blue'}
student_b_colors = {'blue', 'yellow', 'green'}
common_colors = student_a_colors & student_b_colors
# Вывод: {'green', 'blue'}

# Задание 20
sentence1 = "Python is an amazing programming language."
sentence2 = "I enjoy learning Python programming."
words_set = set(sentence1.split()) | set(sentence2.split())
number_of_words = len(words_set)
# Вывод: 10

Особенности множеств в Python

Множества в Python отличаются от других структур хранения, таких как списки, кортежи и строки, в нескольких ключевых аспектах:

1. Неупорядоченность:

  • Элементы в множестве не имеют определенного порядка. В отличие от списков, где порядок элементов важен, множества не поддерживают индексацию или извлечение элементов по порядку.

2. Уникальность элементов:

  • В множестве каждый элемент должен быть уникальным. Если вы добавляете элемент, который уже присутствует в множестве, он не добавится второй раз. Это отличие от списков, где дубликаты разрешены.

3. Изменяемость:

  • Множества являются изменяемыми, что означает, что их можно изменять, добавлять и удалять элементы после их создания. В отличие от кортежей, которые являются неизменяемыми, множества могут быть модифицированы.

4. Отсутствие индексации:

  • Множества не поддерживают доступ к элементам по индексу, так как они не имеют определенного порядка. Операции, такие как индексация и срезы, которые доступны в списках и кортежах, не применимы к множествам.

5. Математические операции:

  • Множества поддерживают математические операции, такие как объединение, пересечение, разность и симметрическая разность, что делает их полезными для решения задач, связанных с множествами и логикой множеств.

6. Поддержка проверки принадлежности:

  • Множества предоставляют эффективную проверку принадлежности элемента, что позволяет быстро определять, содержится ли элемент в множестве.

Методы множеств

  1. add(). Метод add() добавляет элемент в множество.
  2. remove(). Метод remove() удаляет указанный элемент из множества. Если элемент не найден, вызывается исключение KeyError.
  3. discard(). Метод discard() удаляет указанный элемент из множества, если он присутствует. Если элемент не найден, метод ничего не делает и не вызывает ошибку.
  4. pop(). Метод pop() удаляет и возвращает один произвольный элемент из множества. Если множество пусто, вызывается исключение KeyError.
  5. clear(). Метод clear() удаляет все элементы из множества, оставляя пустое множество.
  6. copy(). Метод copy() создает копию множества.
  7. union(). Метод union() возвращает новое множество, являющееся объединением текущего множества и других указанных множеств.
  8. intersection(). Метод intersection() возвращает новое множество, содержащее элементы, присутствующие в обоих множествах.
  9. difference(). Метод difference() возвращает новое множество, содержащее элементы, присутствующие только в текущем множестве, но не в других указанных множествах.
  10. symmetric_difference(). Метод symmetric_difference() возвращает новое множество, содержащее элементы, присутствующие только в одном из множеств.
    • Примечание. Когда используются методы изменения множества (например, add(), remove()), они изменяют текущее множество и не возвращают новое множество. Методы, такие как union(), intersection(), difference(), symmetric_difference(), создают новые множества, не изменяя исходные.
  11. isdisjoint(). Метод isdisjoint() проверяет, является ли множество непересекающимся с другим множеством. Если нет общих элементов, метод возвращает True, иначе False.
  12. issubset(). Метод issubset() проверяет, является ли текущее множество подмножеством другого множества. Если все элементы текущего множества присутствуют в другом, метод возвращает True, иначе False.
  13. issuperset(). Метод issuperset() проверяет, является ли текущее множество надмножеством другого множества. Если все элементы другого множества присутствуют в текущем, метод возвращает True, иначе False.
  14. update(). Метод update() обновляет текущее множество, добавляя элементы из других множеств или итерируемых объектов.
  15. intersection_update(). Метод intersection_update() обновляет текущее множество, оставляя в нем только элементы, присутствующие в других указанных множествах.
  16. difference_update(). Метод difference_update() обновляет текущее множество, удаляя из него элементы, присутствующие в других указанных множествах.
  17. symmetric_difference_update(). Метод symmetric_difference_update() обновляет текущее множество, оставляя в нем элементы, присутствующие только в одном из множеств.

Примечание. Методы, оканчивающиеся на _update(), изменяют текущее множество в процессе выполнения, а не создают новое множество. Они являются «in-place» версиями соответствующих операций над множествами.

Задания на закрепление.

Задание 21: Создайте два множества с числами от 1 до 5 и от 3 до 7. Используя методы множеств, найдите и выведите их объединение.

Задание 22: Создайте множество из гласных букв английского алфавита. Добавьте в это множество гласные буквы из слова «Python». Выведите результат.

Задание 23: Создайте два множества с четными числами до 10 и нечетными числами до 9. С помощью метода найдите и выведите их пересечение.

Задание 24: Создайте множество цветов радуги. Добавьте в него цвета, предпочитаемые вашим другом. Найдите общие цвета и выведите результат.

Задание 25: Создайте множество, представляющее увлечения студента A. Добавьте в него увлечения студента B. Определите, является ли множество A подмножеством множества B.

Задание 26: Создайте множество из букв слова «programming». Удалите из него буквы слова «python». Выведите результат.

Задание 27: Создайте два множества с днями недели. Используя методы, определите, является ли одно из множеств надмножеством другого.

Задание 28: Создайте множество из первых 5 простых чисел. Добавьте в него следующие 5 простых чисел. Используя методы множеств, удалите из него четные числа.

Задание 29: Создайте множество из слов вашего любимого стихотворения. Используя методы, определите количество уникальных слов в стихотворении.

Задание 30: Создайте множество, представляющее категории товаров в магазине A. Обновите его, добавив категории товаров из магазина B. Выведите результат.

Решения
# Задание 21
set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}
union_result = set1.union(set2)
# Вывод: {1, 2, 3, 4, 5, 6, 7}

# Задание 22
vowels_set = set("aeiou")
vowels_set.update(set("Python"))
# Вывод: {'a', 'e', 'i', 'o', 'u', 'P', 'y', 't', 'h', 'n'}

# Задание 23
even_set = {x for x in range(2, 11, 2)}
odd_set = {x for x in range(1, 10, 2)}
intersection_result = even_set.intersection(odd_set)
# Вывод: {2, 4, 6, 8}

# Задание 24
rainbow_colors = {'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'}
friend_colors = {'yellow', 'green', 'blue', 'purple'}
common_colors = rainbow_colors.intersection(friend_colors)
# Вывод: {'blue', 'green', 'yellow'}

# Задание 25
hobbies_a = {'reading', 'coding', 'photography'}
hobbies_b = {'coding', 'gaming', 'cooking'}
is_subset = hobbies_a.issubset(hobbies_b)
# Вывод: False

# Задание 26
word_set_programming = set("programming")
word_set_python = set("python")
result_set = word_set_programming - word_set_python
# Вывод: {'r', 'g', 'm', 'r'}

# Задание 27
days_set1 = {'Monday', 'Tuesday', 'Wednesday'}
days_set2 = {'Tuesday', 'Wednesday', 'Thursday'}
is_superset = days_set1.issuperset(days_set2)
# Вывод: False

# Задание 28
prime_numbers_1_5 = {2, 3, 5}
prime_numbers_6_10 = {7}
prime_numbers_1_10 = prime_numbers_1_5.union(prime_numbers_6_10)
prime_numbers_1_10.difference_update({2, 4, 6, 8, 10})
# Вывод: {3, 5, 7}

# Задание 29
poem_set = {'I', 'love', 'Python', 'programming', 'with', 'all', 'my', 'heart'}
unique_words_count = len(poem_set)
# Вывод: 8

# Задание 30
store_a_categories = {'electronics', 'clothing', 'books'}
store_b_categories = {'books', 'kitchen', 'toys'}
store_a_categories.update(store_b_categories)
# Вывод: {'electronics', 'clothing', 'books', 'kitchen', 'toys'}

Очистка списка от дубликатов с помощью множества

my_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(my_list))

Однако следует учесть, что это не сохранит порядок элементов, так как множества в Python не сохраняют порядок вставки.

Агрегатные функции и сортировка в множествах

  1. len() — определение размера множества:
    my_set = {1, 2, 3, 4, 5}
    size = len(my_set)
    
  2. min() и max() — нахождение минимального и максимального элемента:
    my_set = {1, 2, 3, 4, 5}
    minimum = min(my_set)
    maximum = max(my_set)
    
  3. sum() — вычисление суммы элементов (работает только для числовых значений)
    numeric_set = {1, 2, 3, 4, 5}
    total = sum(numeric_set)
    

Сортировка элементов множества:

  1. sorted() — получение отсортированного списка:
    my_set = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
    sorted_list = sorted(my_set)
    
  2. sorted() с ключом сортировки:
    my_set = {'apple', 'banana', 'kiwi', 'orange'}
    sorted_list_by_length = sorted(my_set, key=len)
    
  3. Обратная сортировка:
    my_set = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
    reverse_sorted_list = sorted(my_set, reverse=True)
    

Примечание:

  • Поскольку множества в Python являются неупорядоченными коллекциями, сами по себе они не поддерживают индексацию и не могут быть отсортированы. Однако, с помощью функции sorted(), мы можем получить отсортированный список из элементов множества.
  • Если порядок элементов важен, лучше использовать другие структуры данных, такие как список.

Перебор элементов множества

Перебор элементов множества в Python можно выполнить с использованием цикла for. Поскольку множества в Python являются итерируемыми объектами, цикл for позволяет легко перебирать все элементы множества. Вот пример:

my_set = {1, 2, 3, 4, 5}

# Простой перебор элементов множества
for element in my_set:
    print(element)

Этот код выведет все элементы множества my_set в произвольном порядке, так как множества в Python не сохраняют порядок вставки элементов.

Если вам необходимо перебрать элементы в отсортированном порядке, вы можете использовать функцию sorted() внутри цикла:

my_set = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}

# Перебор элементов множества в отсортированном порядке
for element in sorted(my_set):
    print(element)

Этот код выведет элементы множества my_set в порядке сортировки.

Если вам нужно выполнить какие-то действия с элементами множества в процессе перебора, вы можете вставить код внутри цикла. Например:

my_set = {1, 2, 3, 4, 5}

# Перебор элементов множества с выполнением действий
for element in my_set:
    squared = element ** 2
    print(f"The square of {element} is {squared}")

Этот код выведет квадрат каждого элемента множества my_set.

frozen_set

frozenset в Python — это неизменяемая (immutable) версия множества set. Основное отличие между set и frozenset заключается в том, что frozenset не может быть изменен после создания, тогда как set является изменяемым типом данных.

Основные отличия:

  1. Изменяемость:
    • set является изменяемым типом данных, и его можно изменять, добавлять и удалять элементы.
    • frozenset является неизменяемым, и после создания нельзя изменить его содержимое.
  2. Применение:
    • set обычно используется там, где требуется изменяемое множество. Например, для динамического добавления и удаления элементов в процессе выполнения программы.
    • frozenset применяется там, где нужно гарантировать, что множество останется неизменным, например, в качестве ключа словаря.

Примеры использования

Использование set:

my_set = {1, 2, 3, 4}
my_set.add(5)
my_set.remove(2)

Использование frozenset:

my_frozenset = frozenset([1, 2, 3, 4])
# Нельзя добавить или удалить элементы:
# my_frozenset.add(5)  # Вызовет ошибку AttributeError
# my_frozenset.remove(2)  # Вызовет ошибку AttributeError

Когда использовать set и frozenset:

  • Используйте set, когда вам нужно изменяемое множество и вы планируете добавлять или удалять элементы в процессе выполнения программы.
  • Используйте frozenset, когда вы хотите создать неизменяемое множество, которое может быть использовано, например, как ключ в словаре или элемент в другом множестве. frozenset также полезен в тех случаях, когда нужно гарантировать, что множество не будет изменено случайно или внутри функции.

Задания для тренировки на множества

Задание 31: Создайте множество с буквами слова «apple». Выведите уникальные буквы в алфавитном порядке.

Задание 32: Создайте два множества с числами от 1 до 5 и от 3 до 7. Используя методы множеств, найдите и выведите их симметрическую разность.

Задание 33: Создайте множество из всех уникальных слов в предложении «Python is powerful and Python is easy to learn.» Выведите количество уникальных слов.

Задание 34: Создайте множество с цифрами от 1 до 10. Удалите из множества числа, кратные 3.

Задание 35: Создайте множество, представляющее собой квадраты первых 10 натуральных чисел. Найдите пересечение этого множества с множеством кубов чисел от 1 до 10.

Задание 36: Создайте два множества с днями недели. Найдите и выведите дни, которые присутствуют только в одном из множеств.

Задание 37: Создайте множество из слов «apple», «orange», «banana». Добавьте к нему слова «grape» и «kiwi». Найдите общие буквы в этих словах.

Задание 38: Создайте два множества с годами рождения друзей A и B. Найдите и выведите годы, в которые родились только друзья из множества A.

Задание 39: Создайте множество с буквами алфавита. Добавьте к нему гласные буквы из слова «Python». Найдите разницу между множеством алфавита и новым множеством.

Задание 40: Создайте множество с числами от 1 до 10. Используя методы множеств, выделите нечетные числа.

Задание 41: Создайте два множества с книгами в библиотеке A и B. Найдите и выведите книги, которые есть только в одной из библиотек.

Задание 42: Создайте множество из слов «apple», «banana», «kiwi». Удалите из множества слово, которого нет в предложении «I like banana and kiwi.»

Задание 43: Создайте два множества с языками программирования, которые знают студенты A и B. Найдите и выведите языки, которые знают оба студента.

Задание 44: Создайте множество из букв слова «education». Используя методы множеств, найдите и выведите гласные буквы.

Задание 45: Создайте два множества с категориями товаров в магазинах A и B. Найдите и выведите общие категории товаров.

Решения
# Задание 31
word_set = set("apple")
sorted_unique_letters = sorted(word_set)
# Вывод: ['a', 'e', 'l', 'p']

# Задание 32
set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}
symmetric_difference_result = set1.symmetric_difference(set2)
# Вывод: {1, 2, 6, 7}

# Задание 33
sentence = "Python is powerful and Python is easy to learn."
unique_words_set = set(sentence.split())
unique_words_count = len(unique_words_set)
# Вывод: 8

# Задание 34
numbers_set = set(range(1, 11))
numbers_set.difference_update({3, 6, 9})
# Вывод: {1, 2, 4, 5, 7, 8, 10}

# Задание 35
squares_set = {x**2 for x in range(1, 11)}
cubes_set = {x**3 for x in range(1, 11)}
intersection_result = squares_set.intersection(cubes_set)
# Вывод: {1, 8, 27, 64, 125}

# Задание 36
days_set1 = {'Monday', 'Tuesday', 'Wednesday', 'Thursday'}
days_set2 = {'Wednesday', 'Thursday', 'Friday'}
unique_days = days_set1.symmetric_difference(days_set2)
# Вывод: {'Monday', 'Tuesday', 'Friday'}

# Задание 37
fruits_set = {'apple', 'orange', 'banana'}
fruits_set.update({'grape', 'kiwi'})
common_letters = set.intersection(*map(set, fruits_set))
# Вывод: {'a'}

# Задание 38
years_a = {1990, 1995, 2000}
years_b = {1995, 2000, 2005}
unique_years = years_a.difference(years_b)
# Вывод: {1990}

# Задание 39
alphabet_set = set(chr(i) for i in range(97, 123))
python_set = set("Python")
difference_result = alphabet_set.difference(python_set)
# Вывод: {'j', 'v', 'l', 'h', 's', 'r', 'i', 'm', 'g', 'f', 'w', 'o', 'k', 'd', 'u', 'n', 'a', 'c', 'b', 'y', 'z', 'e', 'x', 't', 'q'}

# Задание 40
numbers_set = set(range(1, 11))
odd_numbers = numbers_set.difference({2, 4, 6, 8, 10})
# Вывод: {1, 3, 5, 7, 9}

# Задание 41
books_a = {'Python Crash Course', 'Clean Code', 'Algorithm Design Manual'}
books_b = {'Clean Code', 'Design Patterns', 'Code Complete'}
unique_books = books_a.symmetric_difference(books_b)
# Вывод: {'Design Patterns', 'Algorithm Design Manual', 'Python Crash Course', 'Code Complete'}

# Задание 42
words_set = {'apple', 'banana', 'kiwi'}
sentence = "I like banana and kiwi."
words_to_remove = words_set.difference(set(sentence.split()))
words_set.difference_update(words_to_remove)
# Вывод: {'banana', 'kiwi'}

# Задание 43
languages_a = {'Python', 'JavaScript', 'Java'}
languages_b = {'Java', 'C++', 'Ruby'}
common_languages = languages_a.intersection(languages_b)
# Вывод: {'Java'}

# Задание 44
letters_set = set("education")
vowels_set = letters_set.intersection({'a', 'e', 'i', 'o', 'u'})
# Вывод: {'e', 'i', 'o', 'a'}

# Задание 45
categories_a = {'electronics', 'clothing', 'books'}
categories_b = {'books', 'kitchen', 'toys'}
common_categories = categories_a.intersection(categories_b)
# Вывод: {'books'}

Задания повышенной сложности

Задание 46: Поиск анаграмм

Создайте программу, которая принимает на вход две строки и определяет, являются ли они анаграммами друг друга. Анаграммы — это слова или фразы, образованные путем перестановки букв другого слова или фразы. Например, «listen» и «silent» — анаграммы. Решение должно использовать множества для эффективного сравнения символов.

Задание 47: Пересечение множеств в файловой системе

Создайте программу, которая находит и выводит на экран все общие файлы (или файлы с одинаковым содержимым) в двух указанных директориях. Это задание требует обхода файловой системы, сравнения содержимого файлов и использования множеств для эффективного хранения данных о файлах. Обратите внимание на эффективность выполнения, особенно при работе с большим количеством файлов.

Индивидуальное и групповое обучение «Python Junior»
Если вы хотите научиться программировать на Python, могу помочь. Запишитесь на мой курс «Python Junior» и начните свой путь в мир ИТ уже сегодня!

Контакты
Для получения дополнительной информации и записи на курсы свяжитесь со мной:

Телеграм: https://t.me/Vvkomlev
Email: victor.komlev@mail.ru

Объясняю сложное простыми словами. Даже если вы никогда не работали с ИТ и далеки от программирования, теперь у вас точно все получится! Проверено десятками примеров моих учеников.

Гибкий график обучения. Я предлагаю занятия в мини-группах и индивидуально, что позволяет каждому заниматься в удобном темпе. Вы можете совмещать обучение с работой или учебой.

Практическая направленность. 80%: практики, 20% теории. У меня множество авторских заданий, которые фокусируются на практике. Вы не просто изучаете теорию, а сразу применяете знания в реальных проектах и задачах.

Разнообразие учебных материалов: Теория представлена в виде текстовых уроков с примерами и видео, что делает обучение максимально эффективным и удобным.

Понимаю, что обучение информационным технологиям может быть сложным, особенно для новичков. Моя цель – сделать этот процесс максимально простым и увлекательным. У меня персонализированный подход к каждому ученику. Максимальный фокус внимания на ваши потребности и уровень подготовки.

Понравилась статья? Поделиться с друзьями:
Школа Виктора Комлева
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.