Списки Python

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

# Список: упорядоченная коллекция элементов, заключенных в квадратные скобки
['John', 'Peter', 'Debora', 'Charles']

Получение значений по индексам

# Доступ к элементам списка с использованием индекса (начиная с 0, первый элемент имеет индекс 0)
furniture = ['table', 'chair', 'rack', 'shelf']

furniture[0]  # Возвращает первый элемент: 'table'
'table'
furniture[1]
'chair'
furniture[2]
'rack'
furniture[3]
'shelf'

Отрицательные индексы

# Отрицательный индекс: доступ к элементам с конца списка
furniture = ['table', 'chair', 'rack', 'shelf']

furniture[-1]  # Возвращает последний элемент: 'shelf'
'shelf'
furniture[-3]
'chair'
f'The {furniture[-1]} is bigger than the {furniture[-3]}'
'The shelf is bigger than the chair'
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что вернет furniture[-1], если furniture = ['table', 'chair', 'rack', 'shelf']?
A. 'table'
B. 'shelf'
C. ['shelf']
D. IndexError

Получение подсписков с помощью срезов (Slices)

# Срез: получение подсписка с использованием синтаксиса [start:end] (end не включается)
furniture = ['table', 'chair', 'rack', 'shelf']

furniture[0:4]  # Возвращает элементы с индекса 0 по 3 (4 исключается)
['table', 'chair', 'rack', 'shelf']
furniture[1:3]
['chair', 'rack']
furniture[0:-1]
['table', 'chair', 'rack']
# Срез от начала: пропустить начальный индекс (по умолчанию 0)
furniture[:2]  # Возвращает первые два элемента
['table', 'chair']
# Срез до конца: пропустить конечный индекс (по умолчанию до конца списка)
furniture[1:]  # Возвращает все элементы с индекса 1 до конца
['chair', 'rack', 'shelf']
furniture[:]
['table', 'chair', 'rack', 'shelf']

Создание среза всего списка выполнит копирование:

# Срез создает копию: [:] создает неглубокую копию списка
spam = ['cat', 'bat', 'rat', 'elephant']
spam2 = spam[:]  # Создать копию, а не ссылку
spam2
['cat', 'bat', 'rat', 'elephant']
spam.append('dog')
spam
['cat', 'bat', 'rat', 'elephant', 'dog']
spam2
['cat', 'bat', 'rat', 'elephant']
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что создает spam[:], когда spam — это список?
A. Ссылка на тот же список
B. Пустой список
C. Неглубокая копия списка
D. Перевернутый список

Получение длины списка с помощью len()

# len() возвращает количество элементов в списке
furniture = ['table', 'chair', 'rack', 'shelf']
len(furniture)  # Возвращает 4
4

Изменение значений по индексам

# Изменение элементов списка путем присвоения новых значений индексам
furniture = ['table', 'chair', 'rack', 'shelf']

furniture[0] = 'desk'  # Заменить первый элемент
furniture
['desk', 'chair', 'rack', 'shelf']
furniture[2] = furniture[1]
furniture
['desk', 'chair', 'chair', 'shelf']
furniture[-1] = 'bed'
furniture
['desk', 'chair', 'chair', 'bed']

Объединение и повторение

# Объединение списков: объединение двух списков с помощью оператора +
[1, 2, 3] + ['A', 'B', 'C']  # Возвращает [1, 2, 3, 'A', 'B', 'C']
[1, 2, 3, 'A', 'B', 'C']
# Повторение списка: повторение списка несколько раз с помощью оператора *
['X', 'Y', 'Z'] * 3  # Возвращает ['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']
['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']
my_list = [1, 2, 3]
my_list = my_list + ['A', 'B', 'C']
my_list
[1, 2, 3, 'A', 'B', 'C']

Использование циклов for со списками

# Итерация по элементам списка с помощью цикла for
furniture = ['table', 'chair', 'rack', 'shelf']

for item in furniture:  # Цикл по каждому элементу
    print(item)
table
chair
rack
shelf

Получение индекса в цикле с помощью enumerate()

# enumerate() возвращает и индекс, и значение в цикле
furniture = ['table', 'chair', 'rack', 'shelf']

for index, item in enumerate(furniture):  # Получить индекс и элемент вместе
    print(f'index: {index} - item: {item}')
index: 0 - item: table
index: 1 - item: chair
index: 2 - item: rack
index: 3 - item: shelf

Цикл по нескольким спискам с помощью zip()

# zip() объединяет несколько списков попарно в цикле
furniture = ['table', 'chair', 'rack', 'shelf']
price = [100, 50, 80, 40]

for item, amount in zip(furniture, price):  # Сопоставить элементы из обоих списков
    print(f'The {item} costs ${amount}')
The table costs $100
The chair costs $50
The rack costs $80
The shelf costs $40

Операторы in и not in

# Оператор in: проверка наличия элемента в списке
'rack' in ['table', 'chair', 'rack', 'shelf']  # Возвращает True
True
'bed' in ['table', 'chair', 'rack', 'shelf']
False
furniture = ['table', 'chair', 'rack', 'shelf']
'bed' not in furniture
True
'rack' not in furniture
False

Трюк с множественным присваиванием

Трюк с множественным присваиванием — это ярлык, который позволяет присвоить несколько переменных значениям из списка в одной строке кода. Вместо того чтобы делать так:

furniture = ['table', 'chair', 'rack', 'shelf']
table = furniture[0]
chair = furniture[1]
rack = furniture[2]
shelf = furniture[3]

Вы можете написать эту строку кода:

furniture = ['table', 'chair', 'rack', 'shelf']
table, chair, rack, shelf = furniture

table
'table'
chair
'chair'
rack
'rack'
shelf
'shelf'

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

a, b = 'table', 'chair'
a, b = b, a
print(a)
chair
print(b)
table

Метод index

Метод index позволяет найти индекс значения, передав его имя:

furniture = ['table', 'chair', 'rack', 'shelf']
furniture.index('chair')
1

Добавление значений

append()

append добавляет элемент в конец list:

furniture = ['table', 'chair', 'rack', 'shelf']
furniture.append('bed')
furniture
['table', 'chair', 'rack', 'shelf', 'bed']
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает метод append() со списком?
A. Добавляет элемент в конец списка
B. Добавляет элемент в начало списка
C. Заменяет последний элемент
D. Удаляет последний элемент

insert()

insert добавляет элемент в list в заданную позицию:

furniture = ['table', 'chair', 'rack', 'shelf']
furniture.insert(1, 'bed')
furniture
['table', 'bed', 'chair', 'rack', 'shelf']

Удаление значений

del

del удаляет элемент по индексу:

furniture = ['table', 'chair', 'rack', 'shelf']
del furniture[2]
furniture
['table', 'chair', 'shelf']
del furniture[2]
furniture
['table', 'chair']

remove()

remove удаляет элемент по его фактическому значению:

furniture = ['table', 'chair', 'rack', 'shelf']
furniture.remove('chair')
furniture
['table', 'rack', 'shelf']

Удаление повторяющихся элементов

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

pop()

По умолчанию pop удаляет и возвращает последний элемент списка. Вы также можете передать индекс элемента в качестве необязательного параметра:

animals = ['cat', 'bat', 'rat', 'elephant']

animals.pop()
'elephant'
animals
['cat', 'bat', 'rat']
animals.pop(0)
'cat'
animals
['bat', 'rat']
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает pop() при вызове для списка?
A. Только удаляет последний элемент
B. Удаляет и возвращает элемент (по умолчанию последний элемент или указанный индекс)
C. Только возвращает последний элемент, не удаляя его
D. Удаляет все элементы из списка

Сортировка значений с помощью sort()

numbers = [2, 5, 3.14, 1, -7]
numbers.sort()
numbers
[-7, 1, 2, 3.14, 5]
furniture = ['table', 'chair', 'rack', 'shelf']
furniture.sort()
furniture
['chair', 'rack', 'shelf', 'table']

Вы также можете передать True для именованного аргумента reverse, чтобы sort() отсортировал значения в обратном порядке:

furniture.sort(reverse=True)
furniture
['table', 'shelf', 'rack', 'chair']

Если вам нужно отсортировать значения в обычном алфавитном порядке, передайте str.lower для именованного аргумента key в вызове метода sort():

letters = ['a', 'z', 'A', 'Z']
letters.sort(key=str.lower)
letters
['a', 'A', 'z', 'Z']

Вы можете использовать встроенную функцию sorted, чтобы вернуть новый список:

furniture = ['table', 'chair', 'rack', 'shelf']
sorted(furniture)
['chair', 'rack', 'shelf', 'table']

Тип данных Tuple

Кортежи против Списков

Ключевое различие между кортежами и списками заключается в том, что, хотя кортежи являются неизменяемыми объектами, списки являются изменяемыми. Это означает, что кортежи нельзя изменять, в то время как списки можно изменять. Кортежи более эффективны по памяти, чем списки.

furniture = ('table', 'chair', 'rack', 'shelf')

furniture[0]
'table'
furniture[1:3]
('chair', 'rack')
len(furniture)
4

Основное отличие кортежей от списков заключается в том, что кортежи, как и строки, неизменяемы.

Преобразование между list() и tuple()

tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
list(('cat', 'dog', 5))
['cat', 'dog', 5]
list('hello')
['h', 'e', 'l', 'l', 'o']
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Каково основное различие между списками и кортежами в Python?
A. Списки могут содержать только числа, кортежи могут содержать что угодно
B. Кортежи создаются быстрее
C. Списки изменяемы (могут быть изменены), кортежи неизменяемы (не могут быть изменены)
D. Списки используют квадратные скобки, кортежи используют фигурные скобки

Связанные ссылки