6. Списки

Список — это очень удобная структура данных, которая умеет хранить разные типы данных. Ее также можно назвать последовательностью данных.

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

Индексация: важно отметить, что индексация списков начинается с 0 (нуля). Это значит, что первый элемент в списке на самом деле является нулевым в мире Python. Об этом очень важно помнить.

Изменяемость: списки являются изменяемым типом, что значит, что можно добавлять или удалять их элементы. Посмотрим на примерах.

Где используется?

Списки — распространенная структура данных в Python. Они используются для самых разных целей.

МетодДействие
.append()метод для добавления элементов в список
.insert()для добавления элементов в конкретное место в списке
.index()для получения индекса элемента
.clear()для очистки списка
.remove()для удаления элемента списка
.reverse()чтобы развернуть список в обратном порядке
.count()для подсчета количества элементов в списке
sum()для сложения элементов списка
min()показывает элемент с самым низким значением в списке
max()элемент с самым высоким значением в списке

Рекомендации по работе со списками

  1. Списки создаются с помощью квадратных скобок [].
  2. Элементы списка нужно разделять запятыми.
  3. Правила синтаксиса, характерные для определенных типов данных, нужно соблюдать внутри списка. Так, если у строки должны быть кавычки, то их нужно использовать и внутри списка, а для чисел и значений булево типа их не нужно использовать.

Дальше идет список, включающий значения разных типов. Это отличный пример, демонстрирующий нюансы списков. Посмотрим.


>>> p_datatypes = ["Python", "апельсин", 23, 51, False, "False", "22"]
>>> print(p_datatypes)
"Python", "апельсин", 23, 51, False, "False", "22"
  1. Во-первых, видно, что внутри находятся значения разных типов. Это строка, целое число, булево значение и снова строка.
  2. Последние два элемента списка — это строки, хотя они могут напоминать булев тип и целое число. Однако использование кавычек прямо указывает на то, что это строки в Python.
  3. Наконец, если посмотреть на индексы элементов, то можно увидеть, что нулевой элемент — это «Python», а шестой — «22». Оба являются строками. Хотя элементов 7, последним индексом является 6.

Доступ к элементам: доступ к элементам списка можно получить с помощью их индекса, указанного в квадратных скобках.

Например, для получения первого элемента («Python») нужно написать следующим образом: p_datatypes[0]. Для получения элемента 23: p_datatypes[2].

Посмотрим на другие примеры. Последний элемент следующего списка — булево значение False. Получим доступ к нему внутри функции print.


>>> p_datatypes = ["Python", "апельсин", 23, False]
>>> print(p_datatypes[3])
False

А вот получение первого элемента из списка.


>>> p_datatypes = ["Python", "апельсин", 23, False]
>>> print(p_datatypes[0])
'Python'

Обратное индексирование

  1. Обратное индексирование. Элементы списка также можно вызывать, начиная с конца — это называется обратным индексированием. В отличие от обычного индексирования, обратное начинается не с 0, а с -1.
    Для получения последнего элемента списка p_datatypes: p_datatypes[-1].
  2. Аналогично p_datatypes[-2] вернет второй элемент с конца и так далее.

Этот подход имеет свои преимущества в определенных ситуациях. Куда практичнее и эффективнее использовать обратное индексирование, ведь благодаря этому можно не считать количество элементов в списке. Еще одно преимущество становится заметным при изменяемой длине списка. В этом случае снова не придется считать элементы с самого начала, чтобы добраться до финального.


>>> p_datatypes = ["Python", "апельсин", 23, False]
>>> print(p_datatypes[-1])
False

Методы и функции списков

Метод №1: .append()

append() — это, наверное, самый используемый метод списков. Он используется для добавления элементов к списку. Теперь посмотрим на пример, где метод .append() используется для добавления нового элемента в конец списка.


>>> p_datatypes = ["Python", "апельсин"]
>>> p_datatypes.append("BMW")
>>> print(p_datatypes)
["Python", "апельсин", "BMW"]

Метод №2: .insert()

.insert() — еще один полезный метод для списков. Он используется для вставки элемента в список по индексу.

Посмотрим на примере — .insert() принимает два аргумента: индекс, куда нужно вставить новый элемент, и сам элемент.


>>> p_datatypes = ["Python", "апельсин"]
>>> p_datatypes.insert(1, “BMW”)
>>> print(p_datatypes)
["Python", "BMW", "апельсин"]

Метод №3 .index()

.index() помогает определить индекс элемента. Дальше идет пример получения индекса конкретного элемента.


>>> lst = [1, 33, 5, 55, 1001]
>>> a = lst.index(55)
>>> print(a)
3

Метод №4: .clear()

Метод .clear() удаляет все элементы списка.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> lucky_numbers.clear()
>>> print(lucky_numbers)
[]

Метод №5: .remove()

Метод .remove() удаляет конкретный элемент списка.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> lucky_numbers.remove(101)
>>> print(lucky_numbers)
[5, 55, 4, 3, 42]

Метод №6: .reverse()

Метод .reverse() разворачивает порядок элементов в списке.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> lucky_numbers.reverse()
>>> print(lucky_numbers)
[42, 101, 3, 4, 55, 5]

Метод №7: .count()

Метод .count() используется, чтобы подсчитать, как часто конкретный элемент встречается в списке.

В следующем примере мы считаем, как часто в списке встречается число 5. Результат — 1, что значит, что число 5 встретилось всего один раз.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> print(lucky_numbers.count(5))
1

В этом же случае в списке нет 1, поэтому и вывод будет 0.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> print(lucky_numbers.count(1))
0

Функция №8: sum()

Функция sum() вернет общую сумму всех чисел в списке.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> print(sum(lucky_numbers))
210

Функция №9: min()

Функция min() покажет элемент с минимальным значением в списке. Посмотрим пример.


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> print(min(lucky_numbers))
3

Функция №10: max()

Функция max() покажет элемент с максимальным значением в списке. Пример:


>>> lucky_numbers = [5, 55, 4, 3, 101, 42]
>>> print(max(lucky_numbers))
101

Продвинутые рекомендации

Вот еще некоторые функции и методы списков, особенности которых мы рассмотрим позже:

  1. .sort()
  2. .find()
  3. .pop()
  4. len() — используется и в других структурах данныхю.
  5. zip()
  6. map()
  7. filter()
  8. List Comprehension (очень практичный и удобный способ работы со списками)

Как перемешать элементы списка

Перемешать элементы в списке можно с помощью библиотеки random.

Это стандартная библиотека Python, которая предлагает разные полезные элементы (среди самых используемых — randrange и randint).

В этой библиотеке также есть метод shuffle, который можно использовать после импорта random: random.shuffle(список).


>>> import random
>>> lst = [1,2,3,4,5,6,7,8,9,10]
>>> random.shuffle(lst)
>>> print(lst)
[7,3,5,2,6,8,4,1,9]

Задачи к уроку

Попробуйте решить задачи к этому уроку для закрепления знаний.

1. Допишите код, что бы вывести последний элемент списка.


# данный код
sample = ["abc", "xyz", "aba", 1221]
# требуемый вывод:
# 1221

2. Допишите код, что бы вывести расширенный список.

# данный код
sample = ["Green", "White", "Black"]

print(sample)
# требуемый вывод:
# ["Red", "Green", "White", "Black", "Pink", "Yellow"]

3. Исправьте ошибки в коде, что бы посчитать сумму элементов в списке.

# данный код
sample = ["11", "33", "50"]
print(sample.sum())
# требуемый вывод:
# 94

Файл со всем заданиями: https://gitlab.com/PythonRu/python-dlya-nachinayushih/-/blob/master/lesson_6.py.

Тест по спискам

Пройдите тест к этому уроку для проверки знаний. В тесте 5 вопросов, количество попыток неограниченно.

Как создать список?
Что выведет этот код:
a = [ 1, 342, 223, 'India', 'Fedora']
print(a[-3])
Что выведет этот код:
sample = [10, 20, 30]
sample.append(60)
sample.insert(3, 40)
print(sample)
Как получить элемент с максимальным значением в списке чисел?
Что выведет этот код:
lake = ["Python", 51, False, "22"]
lake.reverse()
lake.reverse()
print(lake[-2])

Если нашли ошибку, опечатку или знаете как улучшить этот урок, пишите на почту. Ее можно найти внизу сайта.

Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
admin@pythonru.comAlex Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScript