Таким образом, я действительно не получаю сделку с параметром stride в нарезке.
Например, "123456"[::-2]
создает "642"
, но почему "123456"[1::-2]
создает "2"
и "123456"[2::-2]
производит "31"
?
Уточнение стилей струны Python
Ответ 1
Самый простой способ объяснить - это, вероятно, обратиться к вашим примерам:
"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
Это потому, что синтаксис string[start:end:step]
"123456"[::-2]
Производит "642", потому что он будет начинаться с последнего символа. Это связано с тем, что вы не указали, из какой позиции будет выполняться срез. Таким образом, он вернется на 2 символа от последнего, пока не достигнет первого.
"123456"[1::-2]
Производит "2", потому что вы сказали Python начать со второго символа (индекс 1 из строки), и вы сказали Python вернуться на 2 шага с этой позиции. Что в этом случае, Python, очевидно, вернет только "2". Это связано с тем, что, когда Python попытался вернуться на 2 шага, он уже ударил первого символа в строке всего за один шаг.
"123456"[2::-2]
Теперь вы сможете понять это. Но я все равно объясню это. Итак, вы сказали Python начать с третьего символа (или индекса 2), а затем вернуться на 2 шага оттуда, пока не достигнете первого символа. Таким образом, он начнется с "3", а затем вернется на 2 шага, и случайно будет достигнут первый символ - который будет "1". Таким образом, Python даст вам "31"
Ответ 3
Помните, что индексы начинаются с нуля. Имея это в виду, может быть яснее, если вы измените строку на '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'
Как вы можете видеть, срез начинается с правильного индекса и делает правильный (отрицательный) шаг на каждом шаге, пока он не достигнет начала строки.
Ответ 4
Когда вы используете шаг, у него есть в основном два параметра. (индекс для начала шага, интервал шага)
"1234"[index::interval]
Просто помните, что укусы индексируются начиная с нуля, поэтому
"123456"[2::-2]
говорит, что начинать с индекса 2 или "3" и захватывать каждый в пределах интервала.
"31"
Ответ 5
Давайте разберемся с нарезкой в синтаксисе Python:
string[starting index : ending index : step]
и ваш первый пример:
123456[::-2]
[::]
, без указания начального индекса, он займет всю строку, 123456
[::-2]
, значение -2 означает начало отсчета с конца строки с каждыми 2 шагами.
Итак, вы получите 642.