JavaRush /Курсы /Модуль 1: Python Core /Цикл по элементам множества

Цикл по элементам множества

Модуль 1: Python Core
6 уровень , 6 лекция
Открыта

7.1 Цикл for

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

Для итерации по элементам множества в Python обычно используется цикл for. Поскольку множества не имеют фиксированного порядка элементов, цикл for идеально подходит для обхода элементов множества (т.к. использует механизм итераторов).

Пример:


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

for element in my_set:
    print(element)
        

Выглядит очень просто – давайте добавим несколько практических примеров:

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

Рассмотрим пример, в котором мы суммируем все элементы множества.


my_set = {1, 2, 3, 4, 5}
total = 0
            
for element in my_set:
    total += element
            
print("Сумма элементов множества:", total)
            
        

Вывод:


Сумма элементов множества: 15
        

В этом примере мы используем цикл for, чтобы поочередно добавить каждый элемент множества my_set к переменной total, в результате чего получаем сумму всех элементов множества.

Поиск максимального элемента

А теперь давайте найдем максимальный элемент в множестве.


my_set = {1, 2, 3, 4, 5}
max_element = None
            
for element in my_set:
    if max_element is None or element > max_element:
        max_element = element
            
print("Максимальный элемент множества:", max_element)
        

Вывод:


Максимальный элемент множества: 5
        

В этом примере цикл for используется для перебора всех элементов множества и определения максимального значения.

Фильтрация элементов

Давайте создадим новое множество, содержащее только четные числа из исходного множества.


my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set()
            
for element in my_set:
    if element % 2 == 0:
        even_set.add(element)
            
print("Множество четных чисел:", even_set)
            
        

Множество четных чисел: {2, 4, 6, 8, 10}

В этом примере цикл for используется для фильтрации элементов, удовлетворяющих условию (четность), и добавления их в новое множество even_set.

7.2 Использование enumerate()

Функция enumerate() возвращает итератор, который генерирует кортежи, состоящие из индекса и соответствующего элемента из итерируемого объекта.

При работе с множествами, использование enumerate() может быть полезно для получения индексов элементов во время итерации. Однако, поскольку множества являются неупорядоченными коллекциями, порядок элементов при каждой итерации не гарантируется.

Функция enumerate() работает с множествами так же, как и с любыми другими итерируемыми объектами.

Итерация с индексами

Использование enumerate() для получения индексов элементов множества во время итерации.


my_set = {10, 20, 30, 40, 50}

for index, element in enumerate(my_set):
    print(f"Индекс: {index}, Элемент: {element}")
        

Возможный вывод:


Индекс: 0, Элемент: 40
Индекс: 1, Элемент: 10
Индекс: 2, Элемент: 50
Индекс: 3, Элемент: 20
Индекс: 4, Элемент: 30
        

Сохранение индексов и элементов в списке

Рассмотрим пример, в котором мы сохраняем индексы и элементы множества в списке для дальнейшей обработки.


my_set = {"apple", "banana", "cherry"}

indexed_elements = [(index, element) for index, element in enumerate(my_set)]
print(indexed_elements)
        

Возможный вывод:


[(0, 'banana'), (1, 'cherry'), (2, 'apple')]
        

Обработка элементов с использованием их индексов

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


my_set = {1, 2, 3, 4, 5}
squared_elements = {}
            
for index, element in enumerate(my_set):
    squared_elements[index] = element ** 2
            
print(squared_elements)
            
        

Возможный вывод:


{0: 16, 1: 1, 2: 25, 3: 4, 4: 9}
        

7.3 Использование цикла while

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


my_set = {"убрать дом", "помыть посуду", "купить хлеба"}
while len(my_set) > 0:
    task = my_set.pop()
    print(task)
        

Такой подход будет работать. В общем у вас есть куча способов работать с множеством элементов — используйте любой на ваш выбор.

2
Задача
Модуль 1: Python Core, 6 уровень, 6 лекция
Недоступна
Индексация
Индексация
2
Задача
Модуль 1: Python Core, 6 уровень, 6 лекция
Недоступна
Замена
Замена
Комментарии (22)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
PaPaY Уровень 13
22 марта 2026

user_fruits_set = {"Яблуко","Банан","Груша","Слива","Вишня"}
new_user_fruits_set = set()
print(user_fruits_set)
user_index = int(input(f"введіть індекс який хочете замінити від 0 до {len(user_fruits_set)-1}: "))
user_fruit = input("введіть назву нового фрукту: ").capitalize()

for index, value in enumerate(user_fruits_set):
    if user_index == index:
        new_user_fruits_set.add(user_fruit)
    else:
        new_user_fruits_set.add(value)
print(new_user_fruits_set)
PaPaY Уровень 13
22 марта 2026

from random import randint
user_random_set = set()
for i in range(10):
    random_num = randint(1, 50)
    user_random_set.add(random_num)
for index, value in enumerate(user_random_set):
    print(f"Индекс: {index}, Элемент: {value}")
Анатолий Уровень 63
26 января 2026
Тут в примере словари попали, но их еще не было

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

for index, element in enumerate(my_set):
    squared_elements[index] = element ** 2

print(squared_elements)
Людмила Уровень 11
18 марта 2026
было, было: про словари было сказано, что они создаются конструкцией squared_elements = {}
shinobi Уровень 20
26 июля 2025
Вот пример из лекции

my_set = {"убрать дом", "помыть посуду", "купить хлеба"}
while len(my_set) > 0:
    task = my_set.pop()
    print(task)
Но почему бы не рассказать, что можно и не пользоваться len()?

my_set = {"убрать дом", "помыть посуду", "купить хлеба"}
while my_set:
    task = my_set.pop()
    print(task)
DKlaim Уровень 14
2 июля 2025
Почему в первой задаче не указывается сколько должно быть элементов в множестве?
DKlaim Уровень 14
2 июля 2025
В примере "7.3 Использование цикла while" разве не лишним будет условие len(my_set) > 0? В полне рабочий вариант: while my_set: task = my_set.pop() print(task)
Tatiana Уровень 1
15 июня 2025

fruit_set = {'apple', 'banana', 'cherry', 'orange', 'strawberry', 'kiwi'}
print(fruit_set)
fruit_list = list(fruit_set)
for i, fruit in enumerate(fruit_list):
    print(f"{i}: {fruit}")

index = int(input("Input index from 0 to 5: "))
new_name = input("Input new fruit name: ")
fruit_list[index] = new_name

print(set(fruit_list))
euphor1a Уровень 1
20 мая 2025
Иногда валидатор не пропускает, хотя решение 100% правильное. А иногда пропускает, хотя решение 100% неправильное. Пропустил следующий код от меня

fruits = {'banana', 'apple', 'tangerine', 'watermelon', 'melon'}
print(fruits)

index = int(input("Введите индекс: "))
new_fruit = input("Введите новый фрукт: ")

x = list(fruits)

x[index] = new_fruit

print(set(x))
хотя если подумать, то он неправильный потому что юзер видит в print(fruits) один результат и порядок элементов, а когда я делаю list(fruits), то порядок может поменяться и индексы соответственно и получается, что мы заменим неправильный элемент. вроде бы такая банальность, а пропускает, а когда делаешь что-то действительно работающее - не принимать ни в какую
TopDog888 Уровень 14
5 августа 2025
Так суть задачи в том, что бы начальное множество изменить на данные пользователя, а не вывести на экран измененный список. Логика решения верна, но суть должна быть другой.
EvgenyXIV Уровень 31
23 марта 2026
euphor1a порядок во fruits может меняться при к-н операции над fruits - тогда будет создана новая хеш-таблица, отвечающая за порядок элементов множества. В Вашем коде все корректно. Создание списка из элементов множества не меняет само множество, поэтому порядок элементов множества сохраняется (в этом вызове программы, в другом вызове порядок может изменится из-за рандомизации хешей).
Lexi Уровень 40
2 июня 2026
В Python 3.7+ множества (set) сохраняют порядок вставки элементов. Когда вы выводите множество print(fruits), Python показывает элементы в порядке их хранения в множестве, т.е., в порядке вставки. Дальше мы создаем список из элементов множества x = list(fruits), и здесь Python берет элементы множества в порядке вставки и добавляет из в список. Поэтому порядок и совпадает. В более поздних версиях языка такой порядок не гарантирован.
Юлия Уровень 6
29 марта 2025
Отмечу, что в задаче "Замена" в решении от JavaRush новое создаваемое множество - это не изначальное обновленное множество, а уже другой объект - другое новое множество со своим новым id (т.к. мы 1-е множество переводили в список). Так. обр., сказать, что это обновленное множество нельзя, это новый объект. У меня было решение именно с обновляемым множеством - когда id первоначального множества не изменяется. Данное решение удачно прошло проверку, прикладываю сюда, как альтернативный вариант, наиболее удовлетворяющий условиям задачи, на мой взгляд ("программа должна вывести обновленное множество после замены).

fruits = {'banana', 'apple', 'tangerine', 'watermelon', 'melon'}
print(fruits)

index = int(input("Введите индекс: "))
new_fruit = input("Введите новый фрукт: ")

for i, v in enumerate(fruits):
    if i == index:
        fruits.remove(v)
        fruits.add(new_fruit)

print(fruits)
Vulpeus Inculta Уровень 14
4 мая 2025
Не проходит
Mr.Robot Уровень 21 Expert
20 января 2025
В задаче "Замена" - незаметный глазом пробел перед комментарием "# Напишите тут ваш код" В результате indentatiion error накапливается и готовый код невозможно запустить. 2 раза удалял все, сбрасывал прогресс задачи, начинал сначала и опять упирался в эту проблему, пока не обнаружил в чем дело... Сегодня не мой день, видимо... (
Марина Уровень 14
20 марта 2025
Спасибо за подсказку, так бы тоже мучилась! в начале каждой строки зачем-то лишний пробел появляется, все удалила и заработало!
Andrey Уровень 43
14 октября 2025
Большое спасибо за подсказку! Я тоже не заметил этот пробел, в результате валидатор полностью не принял решение. После удаления пробела - всё ОК!