User:Siebengang/Workbench/Slicing!

Slicing strings (and lists)
Strings can be cut into pieces &mdash; in the same way as it was shown for lists in the previous chapter &mdash; by using the slicing "operators" []. The slicing operator works in the same way as before: text[first_index:last_index] (in very rare cases there can be another colon and a third argument, as in the example shown below).

In order not to get confused by the index numbers, it is easiest to see them as "clipping places", possibilities to cut a sting into parts. Here is an example, which shows the clipping places (in yellow) and their index numbers (red and blue) for a simple text string:

Note that the red indexes are counted from the beginning of the string and the blue ones from the end of the string backwards. (Note that there is no blue -0, which could seem to be logical at the end of the string. Because -0 == 0, -0 means "beginning of the string" as well.) Now we are ready to use the indexes for slicing operations:

text[1:4] gives us all of the text string between clipping places 1 and 4, "TRI". If you omit one of the [first_index:last_index] arguments, you get the beginning or end of the string as default: text[:5] gives "STRIN". For both first_index and <tt>last_index</tt> we can use both the red and the blue numbering schema: <tt>text[:-1]</tt> gives the same as <tt>text[:5]</tt>, because the index -1 is at the same place as 5 in this case. If we do not use an argument containing a colon, the number is treated in a different way: <tt>text[2]</tt> gives us one character following the second clipping point, "<tt>R</tt>". The special slicing operation <tt>text[:]</tt> means "from the beginning to the end" and produces a copy of the entire string (or list, as shown in the previous chapter).

Last but not least, the slicing operation can have a second colon and a third argument, which is interpreted as the "step size": <tt>text[::-1]</tt> is <tt>text</tt> from beginning to the end, with a step size of -1. -1 means "every character, but in the other direction". "<tt>STRING</tt>" backwards is "<tt>GNIRTS</tt>" (test a step length of 2, if you have not got the point yet).

All these slicing operations work with lists as well. In that sense strings are just a special case of lists, where the list elements are single characters.