Множества питон решение задач

Методическое пособие по теме: «Работа с множествами на языке Python»

Данный материал будет полезен учителям информатики, работающих в профильных классах, а также школьникам, желающим повысить свой уровень изучения языка Python .

Описание множеств

Множество в python — «контейнер», содержащий не повторяющиеся элементы в случайном порядке

В множество можно добавлять и удалять объекты, проверять принадлежность объекта множества и перебирать все объекты множества.

Также над множествами можно совершать групповые операции, например, пересекать и объединять два множества.

В отличие от массивов, где элементы хранятся в виде последовательного списка, в множествах порядок хранения элементов неопределен (более того, элементы множества хранятся не подряд, как в списке, а при помощи хитрых алгоритмов). Это позволяет выполнять операции типа “проверить принадлежность элемента множеству” быстрее, чем просто перебирая все элементы множества .

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

Множество в теле программы может быть создано с помощью записи элементов через запятую в фигурных скобках:

Исключением является пустое множество, которое можно создать при помощи функции set() . Если функции set передать в качестве параметра список, строку или кортеж, то она вернёт множество, составленное из элементов списка, строки, кортежа.

Упорядоченность является чистой случайностью.

Если при задании множества присутствовало несколько одинаковых элементов, то они попадут в множество в единственном экземпляре:

Узнать число элементов в множестве можно при помощи функции len .

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

Из множества можно сделать список или кортеж с помощью функций list и tuple соответственно .

Для добавления элемента в множество есть метод add :

Для удаления элемента x из множества можно использовать метод discard . В случае, когда удаляемый элемент отсутствует в множестве метод discard не делает ничего .

Иногда необходимо полностью убрать все элементы. Чтобы не удалять каждый элемент отдельно, используется метод clear, не принимающий аргументов. Если вывести содержимое после этой операции, на экране появится только его название.

В результате получили пустое множество.

Перебрать все элементы множества (в неопределенном порядке!) можно при помощи цикла for :

Проверить, принадлежит ли элемент множеству можно при помощи операции in , возвращающей значение типа bool . Аналогично есть противоположная операция not in

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

В Питоне можно работать не только с отдельными элементами множеств, но и с множествами в целом. Например, для множеств определены следующие операции:

Источник

Множества питон решение задач

Дополните приведенный код, чтобы он вывел сумму квадратов элементов множества numbers.

numbers = 9089, -67, -32, 1, 78, 23, -65, 99, 9089, 34, -32, 0, -67, 1, 11, 111, 111, 1, 23> 
kv = [i**2 for i in numbers] print(sum(kv)) 

Дополните приведенный код, чтобы он вывел элементы множества fruits, каждый на отдельной строке, отсортированные по убыванию (в обратном лексикографическом порядке).

fruits = 'apple', 'banana', 'cherry', 'avocado', 'pineapple', 'apricot', 'banana', 'avocado', 'grapefruit'> 
fr = sorted(fruits, reverse=True) print(*fr, sep='\n') 

На вход программе подается строка текста. Напишите программу, которая определяет количество различных символов в строке.

На вход программе подается строка, состоящая из цифр. Необходимо определить, верно ли, что в ее записи ни одна из цифр не повторяется?

s = input() print(('NO','YES')[len(s) == len(set(s))]) 

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

print(('NO', 'YES')[len(set(input() + input())) == 10]) 

На вход программе подается строка, состоящая из трех слов. Верно ли, что для записи всех трех слов был использован один и тот же набор букв?

a, b, c = input().split() print(['NO', "YES"][set(a) == set(b) == set(c)]) 

Напишите программу для вывода количества уникальных символов каждого считанного слова без учета регистра.

Формат входных данных

На вход программе в первой строке подается число nnn – общее количество слов. Далее идут nnn строк с словами.

Формат выходных данных

Программа должна вывести на отдельной строке количество уникальных символов для каждого слова.

n = int(input()) spisok = [] for i in range(n): temp = len(set(input().lower())) spisok.append(temp) print(*spisok, end='', sep='\n') 

Напишите программу для вывода общего количества уникальных символов во всех считанных словах без учета регистра.

Формат входных данных

На вход программе в первой строке подается число nnn – общее количество слов. Далее идут nnn строк с словами.

Формат выходных данных

Программа должна вывести одно число – общее количество уникальных символов во всех словах без учета регистра.

n = int(input()) spisok = [] for i in range(n): temp = list(input().lower()) spisok.extend(temp) print(len(set(spisok))) 

Напишите программу для определения общего количества различных слов в строке текста.

Примечание 1. Словом считается последовательность непробельных символов, идущих подряд, слова разделены одним или большим числом пробелов.

Примечание 2. Знаками препинания .,;:-?! пренебрегаем.

import re s = input().lower() s = re.sub(r"[-()\"#/@;:<><>`+=~|. ]", "", s) spisok = s.split() print(len(set(spisok))) 

На вход программе подается строка текста, содержащая числа. Для каждого числа выведите слово YES (в отдельной строке), если это число ранее встречалось в последовательности или NO, если не встречалось.

s = set() for item in input().split(): print(["NO", "YES"][item in s]) s.add(item) 

На вход программе подаются две строки текста, содержащие числа. Напишите программу, которая определяет количество чисел, которые есть как в первой строке, так и во второй.

a = list(map(int, input().split())) a = set(a) b = list(map(int, input().split())) b = set(b) c = a.intersection(b) print(len(c)) 

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

a = list(map(int, input().split())) a = set(a) b = list(map(int, input().split())) b = set(b) c = a.intersection(b) c = sorted(c) print(*c) 

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

a = list(map(int, input().split())) a = set(a) b = list(map(int, input().split())) b = set(b) c = a.difference(b) c = sorted(c) print(*c) 

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

ls = [list(input()) for _ in range(int(input()))] print((*sorted(set(ls.pop()).intersection(*ls)))) 

Источник

[ Сборник задач ]Тема 7. Работа с множествами

Рассмотрим, что из себя представляют множества в Python, какими характеристиками они обладают, и какие темы нужно повторить для решения задач.

One

Множества – неупорядоченный тип уникальных данных, включающий только хешируемые элементы. Их можно изменять, неизменяемый аналог – frozenset . Не имеют индексации. Поиск объекта внутри множества очень быстрый (по сравнению со списками и кортежами).
Для успешного решения заданий требуется повторить: особенности множеств, уникальные методы, основные операции, способы модификации.

Читайте также

Разбираем типы данных в Python: списки, кортежи, словари, множества и т. д. Рассматриваем часто используемые способы ввода-вывода данных. Решаем задачи.

Two

Мощность множества показывает количество элементов в нем. По факту, это аналог функции len() для других коллекций. Более того, она же и применяется к множествам. Только правильно говорить мощность, а не длина множества.

Пример – Интерактивный режим
>>> st =
>>> lst = [1, 5, 4, 5, 5]
>>> len(st)
4
>>> len(lst)
5

Для удаления элемента из множества применяются 3 способа:
1 – pop() – удаляет случайный элемент и возвращает его, но вызовет ошибку, если множество пустое (нам для ответа не подходит)
2 – remove() – удаляет объект с конкретным значением, но вызовет ошибку, если его нет (опять же, не наш выбор)
3 – discard() – также удаляет определенный элемент, но не приводит к ошибке, если он отсутствует в данном множестве (как и требовалось ответить)

Пример – Интерактивный режим

>>> st =
>>> st.pop() # Просто удаляет какой-то выборочный элемент
>>> st.remove(9) # Ошибка KeyError: 9
KeyError: 9
>>> st.discard(9) # Хоть элемента нет, ошибка не возникает

Объединение подразумевает формирование множества из всех элементов участников. Функционально оно осуществимо двумя способами:
1 – через метод union() . Сюда можно передать не только множество, но и другие итерабельные объекты (списки, кортежи, строки)
2 – через оператор | . По обе стороны от оператора обязаны быть множества.

Пример – Интерактивный режим
>>> st_1 =
>>> st_2 =
>>> words = ‘string spring’
>>> lst = [4, 4, 3, 55, 2]

# Через оператор |
>>> st_1 | st_2

>>> st_1 | words
Ошибка TypeError

Супермножество включает в себя все элементы другого множества и может быть равно с ним по мощности. Еще есть чистое супермножество, которое строго больше подмножества и содержит все его компоненты. Для проверки на супермножество можно использовать метод issuperset() или знак >= . Для чистого – только оператор > .

Пример – Интерактивный режим
>>> st_1 =
>>> st_2 =
>>> st_1.issuperset(st_2)
True
>>> st_1 >= st_2
True
>>> st_1 > st_2
True
>>> st_2.issuperset(st_1)
False

Так как элементы множества хешируются, их поиск осуществляется практически мгновенно. Чтобы найти объект списка, требуется его перебирать (в худшем случае полностью). Для оценки времени обнаружения конкретного значения проведем тест.

Пример – IDE
from time import perf_counter_ns

MAX_VALUE = 20_000_000
SEARCH_ITEM = 19_999_000

def measure_time(data):
____start = perf_counter_ns()
____ SEARCH_ITEM in data
____ return perf_counter_ns() — start

st = set(range(1, MAX_VALUE))
lst = list(range(1, MAX_VALUE))

Результат выполнения
Set search time: 4276ns
List search time: 299974854ns

Получается, в множестве элемент нашелся в тысячи раз быстрее.

Источник

Читайте также:  Python file can read
Оцените статью