Списки (массивы)
Списки в Python представляют собой упорядоченные последовательности значений.
Создать простой список можно простым перечислением элементов. Например, вот так можно создать список первых пяти простых чисел:
primes = [2, 3, 5, 7, 11]
или список планет:
planets = ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
Индексация
Каждый элемент списка имеет свой уникальный номер, который называется индексом. Индексация элементов списка начинается с нуля. В Python используется нулевая индексация, поэтому первый элемент имеет индекс 0, второй - индекс 1 и т.д.
Доступ к отдельным элементам списка можно получить с помощью квадратных скобок.
print(planets[0]) # Меркурий
print(planets[1]) # Венера
Кроме этого Python, к элементам в конце списка можно обращаться с помощью отрицательных чисел, начиная с -1. Последний элемент имеет индекс -1, предпоследний -2 и т.д.
print(planets[-1]) # Нептуп
print(planets[-2]) # Уран
Срезы
Срезы (slices) в Python - позволяют выбирать несколько элементов из последовательности одновременно.
Синтаксис срезов выглядит следующим образом: [начало:конец:шаг]
. Работают срезы на списках, аналогично срезам на строках. При выполнении среза создается новый список.
print(planets[0:3]) # ['Меркурий', 'Венера', 'Земля']
Начальный и конечный индексы необязательны. Если опустить начальный индекс, он будет считаться равным 0. Таким образом, можно переписать выражение выше следующим образом:
print(planets[:3]) # ['Меркурий', 'Венера', 'Земля']
Если опустить конечный индекс, он будет считаться равным длине списка.
print(planets[3:]) # ['Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
Изменение элементов списка
Списки изменяемы, то есть их можно изменять "на месте".
Один из способов изменить список - присвоить значение по определенному индексу или присвоить результат среза.
Например, допустим, мы хотим переименовать Марс:
planets[3] = 'Малакандра'
print(planets[3]) # Малакандра
Можно изменять элементы среза
planets[:3] = ['Мер', 'Вен', 'Зем']
print(planets) # ['Мер', 'Вен', 'Зем', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
Функции работы со списками
В Python есть несколько полезных функций для работы со списками.
len(list)
возвращает длину списка:
print(len(planets)) # 8
sorted()
создает из исходного списка новый список с отсортированными значениями
planets = ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
print(sorted(planets)) # ['Венера', 'Земля', 'Марс', 'Меркурий', 'Нептун', 'Сатурн', 'Уран', 'Юпитер']
sort()
сортирует значения списка «на месте» (не создавая новый список). Обратите внимание на разницу в вызове между двумя способами сортировки!
planets.sort()
print(planets) # ['Венера', 'Земля', 'Марс', 'Меркурий', 'Нептун', 'Сатурн', 'Уран', 'Юпитер']
list.append(элемент)
изменяет список, добавляя элемент в конец:
planets.append('Плутон')
print(planets) # ['Венера', 'Земля', 'Марс', 'Меркурий', 'Нептун', 'Сатурн', 'Уран', 'Юпитер', 'Плутон']
list.pop()
удаляет и возвращает последний элемент списка:
print(planets.pop()) # 'Плутон'
print(planets) # ['Венера', 'Земля', 'Марс', 'Меркурий', 'Нептун', 'Сатурн', 'Уран', 'Юпитер']
Поиск
Какой по счету идет планета Земля? Мы можем получить индекс элемента используя метод list.index()
.
planets = ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
print(planets.index('Земля')) # 2
Если такого элемента в списке нет, то мы получим ошибку.
Можно использовать оператор in
, чтобы определить, содержит ли список определенное значение:
print('Земля' in planets) # True
Другие полезные функции
sum(list)
возвращает сумму элементов списка (если элементы списка числа)
min(list)
минимальное значение среди элементов списка
max(list)
максимальное значение среди элементов списка
list.count(значение)
определяет сколько раз встречается указанное
значение
в списке
list(последовательность)
преобразует последовательность в массив (каждый элемент последовательности (например, символы строки) будет сохранен как отдельный элемент списка)
Как сохранить входные данные в список (массив)
1) Если входные данные записаны в одной строке, то их можно записать в массив следующим образом:
my_list = list(map(int, input().split()))
2) Если входные данные (например, числа) идут по одному значению в одной строке, и вам необходимо сохранить их в массив, то сделать это можно, используя списочное выражение:
n = int(input()) # количество чисел
a = [int(input()) for i in range(n)]
Вывод элементов массива на экран
Вывести все элементы списка на экран можно функцией
print()
. Так мы делали во всех примерах выше. В этом случае, все элементы будут заключены в квадратные скобки и перечислены через запятую.
Если необходимо вывести элементы без скобок и через другой разделитель (например, пробел), то можно использовать оператор распаковки (
*
)
planets = ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
print(planets) # Меркурий Венера Земля Марс Юпитер Сатурн Уран Нептун
Можно даже вывести все элементы в столбик. Для этого, параметру
sep
необходимо присвоить символ перехода на новую строке (можно присвоить и любой другой символ, который будет разделителем между элементами списка)
planets = ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']
print(planets, sep='\n')
Перебор элементов массива
Перебор элементов массива используется для прохождения по всем элементам и выполнения с каждым из них однотипных действий. Перебор элементов можно выполнять как по самим элементам, так и с использованием индексов.
Перебор по самим элементам используется, когда необходимо только получить значение элемента. Например, вывести все планеты на экран, написав перед каждой слово "Планета" можно следующим образом:
for elem in planets:
print('Планета', elem)
Перебор по индексам используется, если мы хотим изменить элемент или узнать индексе определенного элемента. Например, вывести все планеты с указанием их порядкового номера можно таким образом:
for i in range(len(planets)):
print('Планета номер', i+1, '-', planets[i])