Понимание обозначения среза - PullRequest
2785 голосов
/ 04 февраля 2009

Мне нужно хорошее объяснение (ссылки плюс) на нотации Python.

Мне эта запись нуждается в небольшом подборе.

Выглядит очень мощно, но я не совсем понял, где это.

Ответы [ 31 ]

0 голосов
/ 27 мая 2019

Я не думаю, что диаграмма Python tutorial (цитируется в различных других ответах) хороша, поскольку это предложение работает для положительного шага, но не для отрицательного шага.

Это диаграмма:

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

Из диаграммы я ожидаю, что a[-4,-6,-1] будет yP, но это ty.

>>> a = "Python"
>>> a[2:4:1] # as expected
'th'
>>> a[-4:-6:-1] # off by 1
'ty'

Что всегда работает, так это думать в символах или слотах и ​​использовать индексирование в качестве полуоткрытого интервала - вправо-открыто, если положительный шаг, лево-открыто, если отрицательный шаг.

Таким образом, я могу думать о a[-4:-6:-1] как a(-6,-4] в интервальной терминологии.

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
   0   1   2   3   4   5  
  -6  -5  -4  -3  -2  -1

 +---+---+---+---+---+---+---+---+---+---+---+---+
 | P | y | t | h | o | n | P | y | t | h | o | n |
 +---+---+---+---+---+---+---+---+---+---+---+---+
  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5  
...