Списки в Python: шпаргалка

Срезы, сортировка, агрегаты и включения — самая рабочая часть языка.

Список: создание, индексы, len

cart = ['coffee', 'tea', 'juice']
len(cart)   # 3
cart[0]     # 'coffee'
cart[-1]    # 'juice'
cart[3]     # IndexError

Индексы идут с нуля, минус считает с конца. Последний элемент — cart[-1], а вот cart[len(cart)] всегда падает с IndexError.

Добавить и удалить: append, insert, remove, pop

cart = ['coffee', 'tea']
cart.append('juice')      # ['coffee', 'tea', 'juice']
cart.insert(0, 'water')   # ['water', 'coffee', 'tea', 'juice']
cart.remove('tea')        # by value
last = cart.pop()         # 'juice', and it is removed

append добавляет в конец, insert — по индексу, remove ищет по значению, pop снимает по индексу и возвращает элемент. remove убирает только первое совпадение.

Срезы: часть списка и разворот

items = [10, 20, 30, 40, 50]
items[1:3]    # [20, 30]
items[:2]     # [10, 20]
items[-2:]    # [40, 50]
items[::-1]   # [50, 40, 30, 20, 10]

Срез [a:b] берёт элементы с индекса a до b, не включая b, минус считает с конца; работает и со строками. [::-1] возвращает перевёрнутую копию, исходный список не меняется.

Сортировка: sorted, key и reverse

prices = [349, 99, 199]
sorted(prices)                 # [99, 199, 349]
sorted(prices, reverse=True)   # [349, 199, 99]

words = ['banana', 'fig', 'apple']
sorted(words, key=len)         # ['fig', 'apple', 'banana']

sorted возвращает новый список, а items.sort() сортирует на месте и возвращает None — результат sort присваивать нельзя. key задаёт, по чему сравнивать элементы.

sum, min, max по списку

prices = [349, 99, 199]
sum(prices)                 # 647
min(prices)                 # 99
max(prices)                 # 349
sum(prices) / len(prices)   # 215.66...

Готовые агрегаты вместо цикла со счётчиком; среднее — sum / len. На пустом списке min и max падают с ValueError — проверь длину заранее.

Списковое включение

prices = [349, 99, 199]
doubled = [p * 2 for p in prices]        # [698, 198, 398]
cheap = [p for p in prices if p < 200]   # [99, 199]

Включение строит новый список из старого в одну строку: слева выражение, справа цикл и фильтр. Если читать стало трудно — разверни в обычный for.

Что дальше