В этой статье я разбираю списки в Python 3. Вы узнаете, какими свойствами обладают списки и как можно с ними работать.

Свойства, индексация и срезы списков

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

Списки в Python 3 записываются в квадратных скобках, например так:

my_list = [1, 2, 3, 4, 'пять']

В коде выше мы создали список [1, 2, 3, 4, ‘пять’] и связали его с переменной my_list. Как видите, наш список хранит и числа и строки. Но Python определяет тип объектов во время выполнения, а не при их объявлении в коде. Поэтому, если например, мы захотим из каждого элемента списка отнять 1, а там окажется строка, то ошибка появится во время выполнения, а не во время компиляции.

Список, так же как и строка индексирует свои элементы:

Индексация списка в Python 3
Индексация списка в Python 3

Индексация позволяет обращаться к объектам в списке по индексу (положительному или отрицательному), а также создавать срезы.

Получение некоторых свойств списка, обращение по индексам и создание срезов показана в этом примере:

### Код
my_list = [1, 2, 3, 4, 'пять']
print('Тип объекта - ', type(my_list))        # Тип объекта
print('Длина списка - ',len(my_list))         # Длина списка
print('Первый элемент списка - ', my_list[0]) # Обращение по индексу
print('Срез [1:4] - ', my_list[1:4])          # Срез от 2-ого элемента до 3-его
print('Срез [0:5:2] - ', my_list[0:5:2])      # Срез от 1-ого элемента до 5-ого, с шагом 2

### Исполнение
Тип объекта -  <class 'list'>
Длина списка -  5
Первый элемент списка -  1
Срез [1:4] -  [2, 3, 4]
Срез [0:5:2] -  [1, 3, 'пять']

Запомните, когда вы создаёте срез, то указываете от какого элемента (включительно) и до какого элемента (не включительно). Вы можете указать шаг среза, например каждый второй элемент, или каждый третий, и так далее.

Так как список — это изменяемый тип данных, то мы можем изменить объект, не создавая новый, например так:

### Код
my_list = [1, 2, 3, 4, 'пять']
print(my_list, ' id =', id(my_list))
my_list[4] = 5
print(my_list, ' id =', id(my_list))

### Исполнение
[1, 2, 3, 4, 'пять']  id = 1906747850496
[1, 2, 3, 4, 5]       id = 1906747850496

Из кода видно, что мы изменили список, при этом объект остался прежним.

Работа со списками в Python

Изменение элемента списка

Выше я уже показал, как можно изменить элемент списка, но повторюсь:

### Код
my_list = [1, 2, 3, 4, 'пять']
my_list[4] = 5
print(my_list)

### Исполнение
[1, 2, 3, 4, 5]

Добавление элемента в список

Мы можем добавить элемент в конец списка с помощью метода append. Или добавить элемент на определённую позицию с помощью метода insert (при этом элементы сдвигаются вправо):

### Код
my_list = [1, 2, 3, 4, 'пять']
my_list.append('шесть') # Добавили элемент в конец списка
print(my_list)
my_list.insert(1, "два") # Добавили элемент на 1-ое место
print(my_list)

### Исполнение
[1, 2, 3, 4, 'пять', 'шесть']
[1, 'два', 2, 3, 4, 'пять', 'шесть']

Расширение списка другим списком

Можно расширить список другим списком с помощью метода extend:

### Код
my_list1 = [1, 2, 3]
my_list2 = [4, 5, 6]
my_list1.extend(my_list2)
print(my_list1)

### Исполнение
[1, 2, 3, 4, 5, 6]

Удаление элемента из списка

Удалить элемент из списка можно по значению элемента с помощью метода remove. Или по его индексу с помощью метода pop.

### Код
my_list = [1, 2, 3, 4, 5, 6]
my_list.remove(6)
my_list.pop(0)
print(my_list)
my_list.clear()
print(my_list)

### Исполнение
[2, 3, 4, 5]
[]

Очистка списка

Также можно очистить массив полностью с помощью метода clear:

### Код
my_list = [1, 2, 3, 4, 5, 6]
my_list.clear()
print(my_list)

### Исполнение
[]

Сортировка списка

Отсортировать список с однотипными данными можно с помощью метода sort:

### Код
my_list = [1, 3, 2, 5, 4, 6]
my_list.sort()
print(my_list)

### Исполнение
[1, 2, 3, 4, 5, 6]

Сортировка списка кортежей

Более сложный вариант сортировки, это сортировка списка кортежей.

Если сортировать список кортежей с помощью метода sort() без дополнительных параметров, то сортировка будет происходить по первому элементу кортежей. Затем, если будет встречено 2 одинаковых первых элементов, то по вторым элементам, затем по третьем и так далее.

Для того чтобы отсортировать список не по первому элементу кортежа нужно воспользоваться функцией lambda, с помощью неё можно вести сортировку по заданному элементу кортежа.

Такая запись — key=lambda i: i[1] — означает что сортировка будет по первому индексу в кортеже. Вы можете задать любой индекс. Кортежи должны быть однотипные.

my_list = [(23, 18, 53), (18, 51, 48), (27, 38, 24), (15, 12, 33)]

# Вывод без сортировки
print(my_list) # [(23, 18, 53), (18, 51, 48), (27, 38, 24), (15, 12, 33)]

# Сортировка по первому элементу
my_list.sort()
print(my_list) # [(15, 12, 33), (18, 51, 48), (23, 18, 53), (27, 38, 24)]

# Сортировка по второму элемемту
my_list.sort(key=lambda i: i[1])
print(my_list) # [(15, 12, 33), (23, 18, 53), (27, 38, 24), (18, 51, 48)]

# Сортировка по третьему элемемту
my_list.sort(key=lambda i: i[2])
print(my_list) # [(27, 38, 24), (15, 12, 33), (18, 51, 48), (23, 18, 53)]

Сколько раз элемент встречается в списке

Посчитать сколько раз элемент встречается в списке можно с помощью метода count:

### Код
my_list = [1, 3, 2, 5, 4, 6, 2, 1, 2, 1, 7,1]
print(my_list.count(2))

### Исполнение
3

Копирование списка

Так как список относится к изменяемым типам данным, то при присваивании существующего списка новой переменной, копирования не происходит. Новая переменная просто ссылается на старый список. Может случиться такая ситуация, мы думаем что изменяем новый список, а на самом деле изменяем и старый список тоже (потому что это один и тот же список):

### Код
my_list_1 = [1, 3, 5, 7]
my_list_2 = my_list_1
my_list_2.append(9)
print(my_list_1)

### Исполнение
[1, 3, 5, 7, 9]

Поэтому список нужно копировать с помощью метода copy:

### Код
my_list_1 = [1, 3, 5, 7]
my_list_2 = my_list_1.copy()
my_list_2.append(9)
print(my_list_1)
print(my_list_2)

### Исполнение
[1, 3, 5, 7]
[1, 3, 5, 7, 9]

Проверяем содержится ли элемент в списке

Проверить, содержится ли элемент в списке можно так:

### Код
my_list = [1, 3, 5, 7]
print (1 in my_list)  
print (2 in my_list)

### Исполнение
True
False

Итог

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

Сводка
Python 3. Списки
Имя статьи
Python 3. Списки
Описание
В этой статье я разбираю списки в Python 3. Вы узнаете, какими свойствами обладают списки и как можно с ними работать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *