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

Цикли по елементах кортежу

Модуль 1: Python Core
Рівень 5 , Лекція 13
Відкрита

14.1 Цикл for

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

Цикл for

Цикл for проходить по кожному елементу кортежу, тимчасово присвоюючи значення поточного елемента змінній, зазначеній після ключового слова for. Приклад:


my_tuple = (1, 2, 3, 4, 5)
for number in my_tuple:
    print(number)

Ви вже маєте досвід роботи зі списками та циклом for, тому давайте розглянемо деякі практичні приклади:

Приклад 1: Підсумовування елементів кортежу

Давайте розглянемо приклад, де ми підсумовуємо всі елементи кортежу.


my_tuple = (10, 20, 30, 40, 50)
total = 0

for number in my_tuple:
    total += number

print(f"Сума елементів кортежу: {total}")

У цьому прикладі ми створюємо кортеж my_tuple і змінну total для зберігання суми елементів. Використовуючи цикл for, ми ітеруємо по кожному елементу кортежу та додаємо його до total. В результаті отримуємо суму всіх елементів кортежу.

Приклад 2: Пошук максимального елемента

Тепер розглянемо приклад пошуку максимального елемента в кортежі.


my_tuple = (5, 17, 23, 11, 2)
max_value = my_tuple[0]

for number in my_tuple:
    if number > max_value:
        max_value = number

print(f"Максимальне значення в кортежі: {max_value}")

У цьому прикладі ми ініціалізуємо змінну max_value першим елементом кортежу. Потім ми ітеруємо по всіх елементах кортежу, порівнюючи кожний елемент з поточним максимальним значенням та оновлюючи max_value, якщо знаходимо більше значення.

14.2 Вкладені кортежі

Кортежі можуть містити інші кортежі, і цикл for можна використовувати для ітерування по вкладених структурах даних.


nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))

for inner_tuple in nested_tuple:
    for number in inner_tuple:
        print(number, end=' ')
    print()

У цьому прикладі nested_tuple містить кортежі. Ми використовуємо вкладені цикли for для ітерації по кожному елементу вкладених кортежів. Результат виконання:


1 2 3 
4 5 6 
7 8 9 

14.3 Цикл for з індексами

Так само, як і у списку, у елементів кортежу є індекси, тому можна обійти його елементи за допомогою циклу for (у поєднанні з функцією range()). Це дозволяє працювати не лише з самими елементами, але й з їх позиціями, що буває необхідно при виконанні більш складних маніпуляцій з даними.

Основи індексованої ітерації

Для ітерації по кортежу з доступом до індексу кожного елемента можна використовувати код типу:


my_tuple = ('a', 'b', 'c', 'd')
for i in range(len(my_tuple)):
    print(f'index: {i}, Element: {my_tuple[i]}')

Переваги використання індексів

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

Приклад:


my_tuple = (15, 20, 23, 18, 22, 19, 21)
for i in range(1, len(my_tuple)):
    if my_tuple[i] > my_tuple[i - 1]:  # Порівнюємо елемент з попереднім
        print(f'{my_tuple[i]} is greater than {my_tuple[i - 1]}')

Використання циклу for з індексами для обробки даних

Припустимо, у нас є кортеж з даними про температуру за тиждень, і ми хочемо обчислити середню температуру, виключаючи екстремальні значення (найнижчу і найвищу температуру).


temperatures = (15, 20, 23, 18, 22, 19, 21)
sorted_temps = sorted(temperatures)

# Виключаємо першу та останню температуру
filtered_temps = sorted_temps[1:-1]

average_temp = sum(filtered_temps) / len(filtered_temps)
print(f"Середня температура за тиждень (без екстремальних значень): {average_temp}")

14.4 Використання функції enumerate()

У Python, функція enumerate() надає зручний спосіб ітерації по елементах кортежу з одночасним доступом до їх індексів. Це особливо корисно, коли необхідно обробляти і індекс, і значення елемента списку в рамках циклу.

Основи функції enumerate()

Функція enumerate() обгортає кортеж у спеціальний об'єкт і повертає ітератор, який створює кортежі пар значень, що складаються з індексу і значення елемента кортежу:


my_tuple = ('apple', 'banana', 'cherry')
for index, element in enumerate(my_tuple):
    print(f'index: {index}, Element: {element}')

Тепер у вас є не лише елемент, але й його індекс.

Переваги enumerate()

Використання enumerate() робить код більш читабельним і дозволяє уникнути необхідності вручну керувати індексами за допомогою range(len(…)). Це спрощує маніпуляції з елементами списку, такі як зміна, доступ до елементів і виконання умовних перевірок.

Приклади використання

Іноді потрібно знайти всі індекси, де зустрічається певне значення в кортежі.


my_tuple = (1, 2, 3, 2, 4, 2, 5)
search_value = 2
indices = []

for index, value in enumerate(my_tuple):
    if value == search_value:
        indices.append(index)

print(f"Значення {search_value} зустрічається на індексах: {indices}")

Цей код знайде всі індекси, де значення 2 зустрічається в кортежі:


Значення 2 зустрічається на індексах: [1, 3, 5]

Фільтрація даних на основі індексів

Розглянемо приклад, де ми фільтруємо дані на основі індексів, залишаючи лише елементи з парними індексами.


my_tuple = ('a', 'b', 'c', 'd', 'e', 'f')

filtered_tuple = tuple(value for index, value in enumerate(my_tuple) if index % 2 == 0)
print(f"Кортеж з елементами на парних індексах: {filtered_tuple}")

Цей код створює новий кортеж, що містить лише елементи з парними індексами:


Кортеж з елементами на парних індексах: ('a', 'c', 'e')
Коментарі (3)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Олексій Рівень 32
19 червня 2025
Приклад з середньою температурою ща виключенням найнижчої та найвищої не зрозумів. Найнижча та найвища температура може бути не один день, а виключаємо ми рівно один з початку, та з кінця.
Максим Рівень 9
18 березня 2025
громоздко, але працює 🤣

import random

tup = (tuple(random.randint(1,10) for x in range(10)), tuple(random.randint(1,10) for x in range(10)))
total = 0
for tupl in tup:
    for num in tupl:
        total += num
print(total)
4 березня 2025
"Використання циклу for з індексами для обробки даних" А далі про інше. Може щось пропущено?