← Все вопросы
Как сделать срез списка в Python (взять часть элементов)?
8
Не до конца понимаю срезы. Хочу взять, например, первые три элемента списка, или последние два, или каждый второй. Как работает синтаксис [start:stop:step] и почему конец иногда «не включается»?
1 ответ
13
✓ Принятый ответ — помог автору
Срез это list[start:stop:step], и главное правило — stop не включается. То есть берутся элементы с индекса start до stop, но stop-й уже не входит.
a = [10, 20, 30, 40, 50]
a[0:3] # [10, 20, 30] — индексы 0,1,2, а 3 не входит
a[:3] # [10, 20, 30] — start по умолчанию 0
a[2:] # [30, 40, 50] — до конца
a[-2:] # [40, 50] — последние два
a[::2] # [10, 30, 50] — каждый второй (шаг 2)
a[::-1] # [50,40,30,20,10] — наоборот
Отрицательные индексы считают с конца: -1 это последний элемент, -2 предпоследний.
Почему stop не включается — так длина среза легко считается как stop - start. Например, a[0:3] это ровно 3 элемента. И стыкуются красиво: a[:3] и a[3:] вместе дают весь список без перекрытий.
Два приятных свойства срезов:
- Они не падают при выходе за границы:
a[2:100]просто вернёт[30, 40, 50], без ошибки (в отличие отa[100], который дастIndexError). - Срез всегда создаёт новый список, оригинал не меняется. Поэтому
a[:]— это способ сделать поверхностную копию.
Частая ошибка — ждать, что a[1:3] вернёт 3 элемента. Нет, это два: индексы 1 и 2.
Ваш ответ
, чтобы ответить на вопрос.