Основы работы со списками в Python для начинающих
В этой статье ты познакомишься с основным инструментом в Python для хранения и обработки данных — списками.
Термины, которые мы будем использовать: список, итерируемый объект, изменяемый тип данных, индекс, индексация.
Что такое список
Список — это упорядоченная коллекция данных. Каждый элемент списка имеет свой номер, который называется индексом, причём нумерация начинается с 0. В качестве элементов списка можно использовать числа, строки и другие коллекции.
Простыми словами, список — это как шкаф с пронумерованными ящиками:
- У каждого ящика есть свой номер (индекс).
- В ящики можно класть разные вещи (числа, строки, другие списки).
- Можно добавлять новые ящики, убирать старые или менять их содержимое.
Зачем нужны списки
Списки используются для хранения и обработки большого количества данных.
Структура списков
Элементы списка записываются в квадратных скобках и разделяются запятыми. Пустой список обозначается пустыми квадратными скобками [].
Как создавать списки
Чтобы создать пустой список, можно использовать две конструкции:
empty_list = []
empty_list_2 = list()
list — тип данных в Python, который и обозначает список, поэтому для его создания можно вызвать одноименную функцию list().
Если количество элементов заранее определено, их можно перечислить внутри пустых квадратных скобок, разделяя запятыми.
numbers = [1, 2, 3, 4, 5]
words = [«яблоко», «банан», «апельсин»]
mixed = [1, «текст», True, 3.14, [1, 2]]
Индексы
Каждый элемент списка имеет свой индекс, они пронумерованы начиная от 0. Соответственно первый элемент имеет нулевой индекс, второй элемент — первый индекс и т. д.
words = [«яблоко», «банан», «апельсин»]
В этом списке три элемента, их индексы: 0, 1, 2. То есть последний индекс будет высчитываться по формуле: из длины списка вычесть единицу.
Чтобы обратиться к определённому элементу, нужно знать его индекс. Для этого после указания имени списка в квадратных скобках нужно поставить число — нужный индекс.
Например, print(words[0]) выведет яблоко, print(words[2]) выведет апельсин.
Отрицательная индексация
Можно использовать отрицательные индексы для обращения к элементам, например, индекс −1 обозначает самый последний элемент в списке, вне зависимости от количества элементов в нём. Тогда нумерация пойдет справа налево, от −1 с шагом −1.
Например, print(words[-1]) выведет апельсин, print(words[-3]) выведет яблоко.
Важно: обращение к несуществующему индексу приводит к ошибке.
Пример:
words = [«яблоко», «банан», «апельсин»]
print(words[3])
Ошибка: IndexError: list index out of range
Это дословно переводится как «индекс списка вне диапазона», то есть индекс 3 не существует в диапазоне от 0 до 2.
Перебор списков с помощью цикла
Списки можно перебирать двумя основными способами: по индексам или по элементам.
Перебор по индексам
Например, с помощью функции len() можно узнать длину (количество элементов) списка и поместить найденное значение в качестве правой границы диапазона:
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers)): # от 0 до 5 не включительно
print(numbers[i])
Вывод:
1
2
3
4
5
На каждой итерации мы обращались к списку по i-тому индексу, который принимал значения от 0 до 4 включительно. Так мы обошли весь список.
Перебор по элементам
В некоторых случаях можно обойтись и без индекса, а просто перебирать значения элементов. Список — итерируемый объект, поэтому его элементы можно «перебрать» (как яблоки в корзине).
numbers = [1, 2, 3, 4, 5]
for number in numbers:
print(number)
Вывод:
1
2
3
4
5
Здесь мы выводим уже значение переменной цикла, которая на каждой итерации принимает значение нового элемента списка.
Изменение элемента
Списки — изменяемый тип данных. Это значит, что элементы можно изменить после создания списка.
Чтобы изменить элемент списка, к нему нужно обратиться по индексу и потом работать как с обычной переменной.
numbers = [1, 2, 3, 4, 5]
print(numbers[0]) # 1
numbers[0] = 0
print(numbers[0]) # 0
Теперь вместо 1 мы увидим 0, поскольку заменили элемент, стоящий под 0 индексом, на другое значение.
Добавление элемента
Чтобы добавить новый элемент в список, нужно от имени списка вызвать метод append(), в качестве аргумента передать нужное значение — именно оно заносится в конец списка (под новым индексом на единицу большим чем предыдущий).
numbers = [1, 2, 3, 4, 5]
numbers.append(6)
print(numbers)
Вывод [1, 2, 3, 4, 5, 6]
Вывод элементов списка
Если попытаться распечатать список, то ты увидишь все его элементы через запятую в квадратных скобках, но если ты хочешь видеть лишь сами элементы, то можно воспользоваться оператором распаковки списка. Для этого поставь перед именем списка звездочку (*):
numbers = [1, 2, 3, 4, 5]
print(*numbers)
Вывод 1 2 3 4 5
Вывод также можно регулировать с помощью настроек функции print(): sep= и end=.
Чтобы вывести все элементы с новой строки, можно написать так:
print(*numbers, sep = «\n»)
Тогда между всеми элементами будет перенос на новую строку.
На этом знакомство со списками заканчивается. Потренируйся на задачах, прежде чем переходить ко второй части.
Практика
Задача 1. Сумма элементов списка
Программа сначала запрашивает количество элементов в списке N. Затем по одному вводятся N целых чисел — каждое на новой строке. Создай список из введённых чисел и вычисли их сумму с помощью цикла for. Выведи полученную сумму.
N = int(input())
numbers = []
for i in range(N):
num = int(input())
numbers.append(num)
total = 0
for num in numbers:
total += num
print(total)
Задача 2. Поиск максимального элемента
Программа запрашивает у пользователя числа до тех пор, пока не будет введён 0. Все введённые числа (кроме 0) сохрани в список. Найди максимальный элемент в списке без использования max(). Выведи максимум и его индекс в списке. Примечание: гарантируется, что будет введён хотя бы один элемент помимо 0.
values = []
num = int(input())
while num != 0:
values.append(num)
num = int(input())
maximum = values[0]
max_index = 0
for i in range(len(values)):
if values[i] > maximum:
maximum = values[i]
max_index = i
print(maximum, max_index)
Задача 3. Замена отрицательных чисел на нули
Программа запрашивает у пользователя целые числа по одному. Ввод продолжается до тех пор, пока пользователь не введёт 0. Все введённые числа сохрани в список. Пройдись по списку и замени все отрицательные элементы на 0, а положительные — увеличь в 2 раза. Выведи изменённый список.
numbers = []
num = int(input())
while num != 0:
numbers.append(num)
num = int(input())
for i in range(len(numbers)):
if numbers[i] < 0:
numbers[i] = 0
elif numbers[i] > 0:
numbers[i] *= 2
print(*numbers)
Задача 4. Создание списка квадратов
Программа запрашивает у пользователя два числа A и B (A ≤ B). Создай список квадратов всех чисел от A до B включительно. Если A > B, выведи пустой список. Выведи получившийся список в одну строку.
A = int(input())
B = int(input())
squares = []
if A <= B:
for i in range(A, B + 1):
squares.append(i * i)
print(*squares)
Задача 5. Поиск индекса элемента
Программа запрашивает сначала количество элементов в списке, затем заполняет список числами. После этого запрашивает число для поиска. Найди ВСЕ индексы, по которым встречается это число в списке. Сохрани найденные индексы в новый список и выведи его. Если число не найдено, выведи «Не найдено«.
N = int(input())
nums = []
for i in range(N):
num = int(input())
nums.append(num)
target = int(input())
indices = []
for i in range(len(nums)):
if nums[i] == target:
indices.append(i)
if len(indices) == 0:
print(«Не найдено»)
else:
print(*indices)
Автор:
Быкова Оксана, методист «100балльного репетитора» по информатике ЕГЭ