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

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

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

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

Задача«Вы несёте тортик»

Бабушка Агафья славилась своими пирогами на всю округу. Однажды она доверила вам свой секретный рецепт, записанный на старом свитке. Но вот беда, свиток сильно истрепался, и часть рецепта читается только в обратном порядке!
Вам необходимо помочь восстановить секретный рецепт, чтобы испечь самый вкусный пирог (не пытайтесь испечь торт из представленных несочетаемых ингридиентов!).

Формат ввода

Названия шести ингредиентов, каждый с новой строки

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

Названия ингредиентов в обратном порядке, каждый с новой строки

Пример

Ввод

Мука
Яйца
Сахар
Молоко
Масло
Ваниль

Вывод

Ваниль
Масло
Молоко
Сахар
Яйца
Мука

Подсказка

Списки в 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
Решение разработчика
# Создаем пустой список для ингредиентов
ingredients = []

# Запрашиваем у пользователя названия ингредиентов и добавляем их в список
for i in range(6): # Повторяем 6 раз
    ingredient = input() # Считываем название ингредиента, введенного пользователем
    ingredients.append(ingredient) # Добавляем ингредиент в конец списка

# Переворачиваем список, используя срез с шагом -1
reversed_ingredients = ingredients[::-1]

# Выводим ингредиенты в обратном порядке
for ingredient in reversed_ingredients: # Перебираем все элементы перевернутого списка
    print(ingredient) # Выводим каждый элемент на отдельной строке

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

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

AD

Реклама

red-snake blue-snake green-snake

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

Помощник ИИ

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