Так что я не совсем понимаю параметр шага при нарезке.
Например, "123456"[::-2]
дает "642"
, но почему "123456"[1::-2]
дает "2"
, а "123456"[2::-2]
дает "31"
?
Разъяснение шага нарезки строк Python
Ответы (5)
Самый простой способ объяснить, вероятно, обратиться к вашим примерам:
"123456"[::-2]
# This takes the whole string ([::])
# Then it works backward (-)
# and it does every other character (2)
"123456"[1::-2]
# This is also working backward (-)
# every other character (2)
# but starting at position 1, which is the number 2.
"123456"[2::-2]
# Again, working backward (-)
# Every other character (2)
# begin at position 2, so you end up with positions 2, and 0, or '31'
Синтаксис нарезки: [<start>:<end>:step]
. Если <start>
опущено и шаг отрицательный, то он начинается с конца строки.
[::-2]
берет всю строку, так как вы не назначили start
, поэтому предполагается, что это 0
очень похоже на range(number)
. Кроме того, попробуйте научиться играть с индексами, как только вы это сделаете, это очень мощная функция. Например, вот классная однострочная программа проверки палиндрома: string == string[::-1]
. Удачи!
- person Trufa; 14.10.2011
Это потому, что синтаксис string[start:end:step]
"123456"[::-2]
Производит "642", потому что начинается с последнего символа. Это потому, что вы не указали, из какой позиции будет выполняться срез. Таким образом, он вернется на 2 символа от последнего, пока не достигнет первого.
"123456"[1::-2]
Производит «2», потому что вы сказали Python начать со 2-го символа (индекс 1 из строки), и вы сказали Python вернуться на 2 шага назад от этой позиции. В этом случае Python, очевидно, вернет только «2». Это связано с тем, что когда Python пытался вернуться на 2 шага назад, он уже достиг первого символа в строке всего за один шаг.
"123456"[2::-2]
Вы должны быть в состоянии понять это сейчас. Но я все равно объясню. Итак, вы сказали Python начать с третьего символа (или индекса 2), а затем вернуться оттуда на 2 шага, пока не достигнет первого символа. Таким образом, он начнется с «3», а затем вернется на 2 шага, и случайно будет достигнут первый символ, который оказывается «1». Итак, Python даст вам «31»
Помните, что индексы начинаются с нуля. Имея это в виду, может быть понятнее, если вы измените свою строку на '012345'
:
In [1]: '012345'[1::-2]
Out[1]: '1'
In [2]: '012345'[2::-2]
Out[2]: '20'
In [3]: '012345'[5::-2]
Out[3]: '531'
Как видите, срез начинается с правильного индекса и делает правильный (отрицательный) шаг на каждом шаге, пока in не достигнет начала строки.
Когда вы используете шаг, он имеет в основном два параметра. (индекс начала шага, интервал шага)
"1234"[index::interval]
Просто помните, что строки индексируются, начиная с нуля, поэтому
"123456"[2::-2]
говорит, что начинается с индекса 2 или «3» и захватывается каждый в пределах интервала.
"31"
давайте разберемся с нарезкой в синтаксисе python:
string[starting index : ending index : step]
и ваш первый пример:
123456[::-2]
[::]
, без указания начального индекса, возьмет всю строку, 123456
[::-2]
, значение -2 означает, что счет начинается с конца строки через каждые 2 шага.
Таким образом, вы получите 642.