8.Работа со списками
Базовые приёмы
Чтобы создать список, нужно перечислить его элементы через запятую в квадратных скобках:
numbers = [2, 4, 64, 17, 10]
languages = ['Python', 'C++', 'Java']
Индексация в списках похожа на индексацию в строках. В списках индексу соответствует какое-то значение списка.
Список numbers состоит из 5 элементов, и каждый из них — целое число:
- numbers[0] == 2;
- numbers[1] == 4;
- numbers[2] == 64;
- numbers[3] == 17;
- numbers[4] == 10.
Список languages состоит из 4 элементов, каждый из которых — строка:
- languages[0] == 'Python';
- languages[1] == 'C++';
- languages[2] == 'Java'.
Значения, заключенные в квадратные скобки и отделенные запятыми, называются элементами списка. Список может содержать значения разных типов данных:
info = ['Timur', 1992, 61.5]
Для вывода всего списка можно применить функцию print. Функция print()
выводит на экран элементы списка, в квадратных скобках, разделенные запятыми:
numbers = [2, 4, 6, 8, 10]
languages = ['Python', 'C++', 'Java']
print(numbers) # [2, 4, 6, 8, 10]
print(languages) # ['Python', 'C#', 'C++']
Операторы + и * можно использовать для списков. Оператор + соединяет все списки в один. Оператор * создаёт список с указанным количеством одних и тех же элементов:
print(['a', 'b'] + [1, 4]) # ['a', 'b', 1, 4]
print(['a', 'b'] * 3) # ['a', 'b', 'a', 'b', 'a', 'b']
Мы можем найти длину списку с помощью функции len:
a = ['a', 'b', 'c', '1', '2', '3']
print(len(a)) # 6
С помощью оператора in, мы можем проверять, находится ли какое-то значение в списке:
foods = ['хлеб', 'молоко', 'печенье']
if 'молоко' in s:
print("Нужно купить молоко")
else:
print("Молоко покупать не надо")
Python имеет встроенную функцию list()
, которая помимо создания пустого списка может преобразовывать некоторые типы объектов в списки.
Например, мы знаем, что функция range()
создает последовательность целых чисел в заданном диапазоне. Для преобразования этой последовательности в список, мы пишем следующий код:
numbers = list(range(5))
Во время исполнения этого кода происходит следующее:
- Вызывается функция
range()
, в которую в качестве аргумента передается число 5; - Эта функция возвращает последовательность чисел 0, 1, 2, 3, 4;
- Последовательность чисел 0, 1, 2, 3, 4 передается в качестве аргумента в функцию
list()
; - Функция
list()
возвращает список [0, 1, 2, 3, 4]; - Список [0, 1, 2, 3, 4] присваивается переменной numbers.
Точно так же с помощью функции list()
мы можем создать список из символов строки. Для преобразования строки в список мы пишем следующий код:
s = 'abcde'
chars = list(s)
print(chars) # ['a', 'b', 'c', 'd', 'e']
Срезы списков
С помощью среза мы можем получить несколько элементов списка, создав диапазон индексов, разделенных двоеточием:
numbers = [2, 4, 6, 8, 10]
print(numbers[1:3]) # [4, 6]
print(numbers[2:5]) # [6, 8, 10]
При построении среза первое число – это то место, где начинается срез (включительно), а второе – это место, где заканчивается срез (невключительно). Разрезая списки, мы создаем новые списки, по сути, подсписки исходного.
При использовании срезов со списками мы также можем опускать второй параметр в срезе numbers[x:]
(но поставить двоеточие), тогда срез берется до конца списка.
Аналогично если опустить первый параметр numbers[:y]
, то можно взять срез от начала списка. Срез numbers[:]
возвращает копию исходного списка:
numbers = [2, 4, 6, 8, 10, 12, 14]
print(numbers[4:]) # [10, 12, 14]
print(numbers[:5]) # [2, 4, 6, 8, 10]
Как и в строках, мы можем использовать отрицательные индексы в срезах списков.
Для изменения целого диапазона элементов списка можно использовать срезы.
Например, если мы хотим перевести на русский язык названия фруктов 'banana', 'cherry', 'kiwi', то это можно сделать с помощью среза.
fruits = ['apple', 'apricot', 'banana', 'cherry', 'kiwi', 'lemon']
fruits[2:5] = ['банан', 'вишня', 'киви']
print(fruits) # ['apple', 'apricot', 'банан', 'вишня', 'киви', 'lemon']
Также мы можем удалять элемент списка по индексу или подсписок с помощью среза через оператор del:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
del numbers[5]
print(numbers) # [1, 2, 3, 4, 5, 7, 8, 9]
del numbers[2:6]
print(numbers) # [1, 2, 8, 9]
Мы можем удалить все элементы на четных позициях (0, 2, 4, ...) исходного списка.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
del numbers[::2]
print(numbers) # [2, 4, 6, 8]
Встроеные функции
Встроенная функция sum()
принимает в качестве аргумента список чисел и вычисляет сумму его элементов:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('Сумма всех элементов списка =', sum(numbers)) # 'Сумма всех элементов списка = 45'
Встроенные функции min()
и max()
принимают в качестве аргумента список и находят минимальный и максимальный элементы соответственно:
numbers = [3, 4, 10, 3333,
12, -7, -5, 4]
print('Минимальный элемент =', min(numbers)) # 'Минимальный элемент = -7'
print('Минимальный элемент =', max(numbers)) # 'Максимальный элемент = 3333'
Встроенная функция sorted()
принимает в качестве аргумента список и возвращает отсортированный, также может принять аргумент reverse, если он равен False (по умолчанию), то сортирует по возрастанию если равен True, то по убыванию
a = [1, 7, -3, 9, 0,
-67, 34, 12, 45, 1000, 6,
8, -2, 99]
sort1_a = sorted(a)
print(sort1_a) # [-67, -3, -2, 0, 1, 6, 7, 8, 9, 12, 34, 45, 99, 1000]
sort1_a = sorted(a, reverse=True)
print(sort1_a) # [1000, 99, 45, 34, 12, 9, 8, 7, 6, 1, 0, -2, -3, -67]
Методы списков
l.append(m)
- добавляет в список l элемент m:
numbers = [1, 1, 2, 3,
5, 8, 13, 4]
numbers.append(21)
numbers.append(34)
print(numbers) # [1, 1, 2, 3, 5, 8, 13, 21, 34]
l.count(m)
- выводит количество элементов m в списке l:
names = ['Timur', 'Gvido', 'Roman', 'Timur', 'Anders', 'Timur']
cnt1 = names.count('Timur')
cnt2 = names.count('Josef')
print(cnt1) # 3
print(cnt2) # 0
l.index(m)
- выводит индекс первого вхождения элемента m в списке l, если нет элемента m в списке, то происходит ошибка:
names = ['Gvido', 'Roman', 'Timur', 'Anders', 'Timur']
position = names.index('Timur')
print(position) # 2
names = ['Gvido', 'Roman', 'Timur']
position = names.index('Anders')
print(position) # ValueError: 'Anders' is not in list
l.remove(m)
- удаляет первый элемент m в списке l, если нет элемента m в списке, то происходит ошибка:
food = ['Рис', 'Курица', 'Рыба', 'Брокколи', 'Рис']
print(food) # ['Рис', 'Курица', 'Рыба', 'Брокколи', 'Рис']
food.remove('Рис')
print(food) # ['Курица', 'Рыба', 'Брокколи', 'Рис']
l.sort(reverse)
- сортирует список по возрастанию, если reverse=False, а если reverse=True, то по убыванию, по умолчанию: reverse=False:
a = [1, 7, -3, 9, 0,
-67, 34, 12, 45, 1000, 6,
8, -2, 99]
Отличие от функции sorted в том, что sorted возвращает отсортированный список, но не изменяет его, а sort - изменяет сам список, но ничего не возвращает.
a.sort()
print('Отсортированный список:', a)
# Отсортированный список: [-67, -3, -2, 0, 1, 6, 7, 8, 9, 12, 34, 45, 99, 1000]
a.sort(reverse=True)
print('Отсортированный список:', a)
# Отсортированный список: [1000, 99, 45, 34, 12, 9, 8, 7, 6, 1, 0, -2, -3, -67]
a = [1, 7, -3, 9, 0,
-67, 34, 12, 45, 1000, 6,
8, -2, 99]
print(sorted(a)) # [-67, -3, -2, 0, 1, 6, 7, 8, 9, 12, 34, 45, 99, 1000]
print(a.sort())) # None
Также мы можем вывести все значения списка без квадратных скобок [], для этого в функции print необходимо перед именем переменной со списком поставить знак звёздочки *:
l = [1, 5, "st", 1.043, "And"]
print(*l) # 1 5 st 1.043 And