Я знаю, что могу использовать что-то вроде string [3: 4]
, чтобы получить подстроку в Python, но что означает 3 в somesequence [:: 3]
?
это означает «ничего для первого аргумента, ничего для второго и прыгать на три». Он получает нарезку каждого третьего элемента последовательности. Расширенные фрагменты - это то, что вам нужно. Новое в Python 2.3
Адреса фрагментов последовательности Python могут быть записаны как [начало: конец: шаг], и любое из начало, конец или конец можно отбросить. a [:: 3]
- это каждый третий элемент последовательности.
seq [:: n]
- это последовательность каждого n
-го элемента во всей последовательности.
Пример:
>>> range(10)[::2]
[0, 2, 4, 6, 8]
Синтаксис:
seq[start:end:step]
Итак, вы можете сделать:
>>> range(100)[5:18:2]
[5, 7, 9, 11, 13, 15, 17]
При нарезке в Python третьим параметром является шаг. Как уже упоминалось, см. Расширенные фрагменты для хорошего обзора.
С учетом этого [:: 3]
просто означает, что вы не указали начальный или конечный индексы для своего фрагмента. Поскольку вы указали шаг 3
, это займет каждую третью запись что-то
, начиная с первого индекса. Например:
>>> '123123123'[::3]
'111'
Третий параметр - это шаг. Итак, [:: 3] вернет каждый третий элемент списка / строки.
s [i: j: k]
является, согласно документации , «срезом s от i до j с шагом k». Когда i
и j
отсутствуют, предполагается вся последовательность, и, таким образом, s [:: k]
означает «каждый k-й элемент».
Сначала инициализируем список:
>>> s = range(20)
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Давайте возьмем каждые 3 rd элемента из s
:
>>> s[::3]
[0, 3, 6, 9, 12, 15, 18]
Давайте возьмем каждые 3 rd элемент из с [2:]
:
>>> s[2:]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> s[2::3]
[2, 5, 8, 11, 14, 17]
Давайте возьмем каждый 3 -й элемент из с [5:12]
:
>>> s[5:12]
[5, 6, 7, 8, 9, 10, 11]
>>> s[5:12:3]
[5, 8, 11]
Давайте возьмем каждые 3 -го элемента из s [: 10]
:
>>> s[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s[:10:3]
[0, 3, 6, 9]