• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 6. Списки

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Суп в школе»

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

Формат ввода

Количество порций супа, приготовленных в понедельник
Количество порций супа, приготовленных во вторник
...
Количество порций супа, приготовленных в воскресенье

Формат Вывода

Общее количество порций супа, приготовленных со среды по пятницу включительно

Пример

Ввод

50
45
60
55
70
30
25

Вывод

185

Подсказка

Списки в Python: подробное руководство

Список (list) – это упорядоченная и изменяемая коллекция, которая может содержать элементы различных типов. Слово "изменяемая" (mutable) означает, что вы можете добавлять, удалять или изменять элементы списка уже после его создания. Списки в Python аналогичны массивам в других языках программирования, но предоставляют значительно больше гибкости и встроенных функций.

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

Создание списка

Список создается с помощью квадратных скобок [] или с помощью функции-конструктора list().

# Пустой список
my_list = []

# Список с несколькими элементами
my_list = [1, 2, 3, 4, 5]

# Список с элементами разных типов
my_list = [1, "hello", 3.14, True]

# Создание списка из другого итерируемого объекта, например, строки
char_list = list("Python")
print(char_list) # Вывод: ['P', 'y', 't', 'h', 'o', 'n']

Ввод списка пользователем

Есть несколько способов получить список от пользователя.

# Способ 1: Ввод через функцию eval()
# **ВНИМАНИЕ:** Использовать eval() с пользовательским вводом КРАЙНЕ НЕБЕЗОПАСНО,
# так как это позволяет выполнить любой произвольный код.
# Используйте этот метод только в учебных целях и никогда в реальных проектах.
my_list = eval(input("Введите список в формате [1, 2, 3]: "))
print(my_list) # Вывод: [1, 2, 3]

# Способ 2: Безопасный и предпочтительный способ
# Ввод чисел через пробел
s = input("Введите числа через пробел: ") # Пользователь вводит: 1 2 3 4 5
numbers_list = s.split() # Получаем список строк: ['1', '2', '3', '4', '5']
# Чтобы работать с ними как с числами, их нужно преобразовать:
int_list = [int(num) for num in numbers_list]
print(int_list) # Вывод: [1, 2, 3, 4, 5]

Добавление элементов в список

Python предоставляет несколько методов для добавления элементов в список:

  • append(): добавляет один элемент в самый конец списка. Это самая быстрая операция по добавлению.
  • insert(): вставляет элемент в указанную позицию (по индексу), сдвигая остальные элементы.
  • extend(): расширяет список, добавляя в конец все элементы из другой коллекции (например, другого списка).
numbers = [1, 2, 3]

# Добавление элемента в конец
numbers.append(4)
print(numbers)  # Вывод: [1, 2, 3, 4]

# Вставка элемента на позицию 1
numbers.insert(1, 10)
print(numbers)  # Вывод: [1, 10, 2, 3, 4]

# Добавление нескольких элементов из другого списка
numbers.extend([5, 6, 7])
print(numbers)  # Вывод: [1, 10, 2, 3, 4, 5, 6, 7]

Полезный совет: Также можно объединять списки с помощью оператора +, но это создает совершенно новый список, а не изменяет существующий, в отличие от extend().

list1 = [1, 2]
list2 = [3, 4]
list3 = list1 + list2
print(list3) # Вывод: [1, 2, 3, 4]
print(list1) # Вывод: [1, 2] (остался без изменений)

Доступ к элементам списка

Элементы списка доступны по индексу. Индексация начинается с 0 для первого элемента. Также поддерживается отрицательная индексация, где -1 — это последний элемент.

my_list = [10, 20, 30, 40, 50]
# Доступ к первому элементу
print(my_list[0])  # Вывод: 10

# Доступ к последнему элементу
print(my_list[-1])  # Вывод: 50

# Доступ к элементу по индексу 2
print(my_list[2])  # Вывод: 30

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

Изменение элементов списка

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

my_list = [10, 20, 30, 40, 50]
my_list[1] = 25 # Заменяем элемент с индексом 1
print(my_list)  # Вывод: [10, 25, 30, 40, 50]

Срезы списка

Срезы (slices) позволяют получать части списка, создавая новый список. Синтаксис: list[start:stop:step].

  • start: начальный индекс (включается). Если опущен, срез начнется с начала списка.
  • stop: конечный индекс (не включается). Если опущен, срез пойдет до конца списка.
  • step: шаг. Если опущен, равен 1.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Срез с 2 по 5 индекс (элементы с индексами 2, 3, 4, 5)
sublist = numbers[2:6]
print(sublist)  # Вывод: [3, 4, 5, 6]

# Срез с начала до 5 индекса
sublist = numbers[:6]
print(sublist)  # Вывод: [1, 2, 3, 4, 5, 6]

# Срез с 5 индекса до конца
sublist = numbers[5:]
print(sublist)  # Вывод: [6, 7, 8, 9]

# Каждый второй элемент
sublist = numbers[::2]
print(sublist)  # Вывод: [1, 3, 5, 7, 9]

# Создание копии списка в обратном порядке
sublist = numbers[::-1]
print(sublist)  # Вывод: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Полезный совет: Срез всегда создает новый список (поверхностную копию). Это удобный способ скопировать список: new_list = old_list[:].

Перебор элементов списка

Списки можно перебирать с помощью цикла for.

numbers = [1, 2, 3, 4, 5]

# Способ 1: Прямой перебор (предпочтителен, если не нужен индекс)
# Этот способ более читаемый и "питонический" (Pythonic)
for number in numbers:
    print(number, end=" ")
# Вывод: 1 2 3 4 5

print() # для переноса строки

# Способ 2: Перебор по индексам (когда нужен сам индекс)
for i in range(len(numbers)):
    print(f"Индекс {i}, значение {numbers[i]}")

# Способ 3: Идеальный вариант, когда нужен и индекс, и значение
# Используйте встроенную функцию enumerate()
for i, number in enumerate(numbers):
    print(f"Индекс {i}, значение {number}")

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

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

numbers = [12, 6, 2, 4, 9, 6, 10]
# Сравниваем текущий элемент со следующим
for i in range(len(numbers) - 1): # Идем до предпоследнего элемента
    if numbers[i] > numbers[i+1]:
        print(numbers[i], end=" ")
# Вывод: 12 6 9

Общее правило: Если в цикле вы обращаетесь к numbers[i+k], то диапазон цикла должен быть range(len(numbers) - k). Например, для обработки троек элементов (i, i+1, i+2), цикл будет for i in range(len(numbers) - 2).

Красивый вывод содержимого списка

numbers = [1, 2, 3, 4, 5]

# Способ 1: Через цикл и параметр end
for i in range(len(numbers)):
    print(numbers[i], end=" ")
# Вывод: 1 2 3 4 5

print() # для переноса строки

# Способ 2: Более элегантный и современный
# Использование оператора "*" (распаковка списка)
print(*numbers) # по умолчанию разделитель - пробел
# Вывод: 1 2 3 4 5

# Можно указать любой другой разделитель
print(*numbers, sep=", ")
# Вывод: 1, 2, 3, 4, 5
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Создаем список с количеством порций за неделю
# Считываем количество порций супа за каждый день недели
porc = []
for i in range(7):
    porc.append(int(input()))

# Считаем сумму порций со среды по пятницу (индексы 2, 3, 4)
porc_sum = porc[2] + porc[3] + porc[4]

# Выводим результат
print(porc_sum)

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!