Страницы

среда, 21 ноября 2012 г.

Строки. Индексы и срезы.

К элементам строки можно обращаться но индексу, прямо как в С. Первый символ строки имеет индекс 0. В отличие от языка С, строки в Python изменять нельзя. Назначение значения индексу строки, приведет к ошибке.
>>> s = 'Hello'
>>> s[0]
'H'
>>> s[0] = 'h'
Traceback (most recent call last):
  File "&;lt;pyshell#38>", line 1, in <module>
    s[0] = 'h'
TypeError: 'str' object does not support item assignment
Операция извлечения нескольких индексов, называется срезом. Для создания среза (подстроки) используется два индекса, разделенные двоеточиями.
>>>word = 'HelpA'
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
У среза опущенный первый индекс по умолчанию будет равен нулю, а второй размеру строки.
>>> word[:2]    # The first two characters
'He'
>>> word[2:]    # Everything except the first two characters
'lpA'
Третий индекс в срезе означает шаг.
>>> word = 'HelpA'
>>> word[::2]
'HlA'
При помощи срезом можно очень просто и в тоже время очень эффективно создавать новые строки на базе уже имеющихся.
>>> 'x' + word[1:]
'xelpA'
>>> 'Splat' + word[4]
'SplatA'
>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'
Вырожденные срезы обрабатываются корректно. Слишком большой индекс, заменяется на размер строки, а если верхняя граница меньше, чем нижняя возвращается пустая строка.
>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''
Индексы могут быть отрицательными, в этом случае отсчет начинается с права.
>>> word[-1]     # The last character
'A'
>>> word[-2]     # The last-but-one character
'p'
>>> word[-2:]    # The last two characters
'pA'
>>> word[:-2]    # Everything except the last two characters
'Hel'
>>> word[-0]     # (since -0 equals 0)
'H'
Следует обратить внимание, что -0 это 0, поэтому отсчет не начинается с права. В случаи, если отрицательные индексы выходят за диапазон, срез усекается. Но это не сработает, если индекс будет один, интерпретатор выдаст ошибку.
>>> word[-100:]
'HelpA'
>>> word[-10]    # error
Traceback (most recent call last):
  File "", line 1, in ?
IndexError: string index out of range
Можно легко запомнить как работают срезы, если представить индексы как указатели между символами.
 +---+---+---+---+---+
 | H | e | l | p | A |
 +---+---+---+---+---+
 0   1   2   3   4   5
-5  -4  -3  -2  -1
Небольшой фокус. Если сделать полный срез строки, но с отрицательным шагом, мы получим перевернутую строку.
>>> word
'HelpA'
>>> word[::-1]
'ApleH'
А для того чтобы получить последний элемент в строке, достаточно просто задать индекс -1.
>>> word
'HelpA'
>>> word[-1]
'A'

Комментариев нет:

Отправить комментарий