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

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

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

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

Задача«Юный альпинист»

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

Формат ввода

Одна строка, содержащая целые числа, разделенные пробелами — высоты, зафиксированные Васей.

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

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

Пример

Ввод

1500 1650 1600 1800 1750 1900

Вывод

1650 1800 1900

Подсказка

Списки в 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
Решение разработчика
# Считываем строку с высотами и преобразуем в список целых чисел
heights = list(map(int, input().split()))

# Создаем список для хранения высот, которые больше предыдущей
higher_heights = []

# Проходим по всем высотам, начиная со второй (индекс 1)
for i in range(1, len(heights)):
    # Сравниваем текущую высоту с предыдущей
    if heights[i] > heights[i-1]:
        # Если текущая высота больше предыдущей, добавляем ее в результат
        higher_heights.append(str(heights[i]))  # Преобразуем в строку для удобства вывода

# Преобразуем список в строку через пробел и выводим
if higher_heights:  # Если список не пустой
    print(" ".join(higher_heights))

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

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

AD

Реклама

red-snake blue-snake green-snake

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

Помощник ИИ

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