Substring
In Python we use slice syntax to get parts of existing strings—we can extract words from strings. We specify starts and ends.
With indexes and slices, we have one, two or three parts. We use a start index and an end index. The final value is a step—an amount to skip between.
This code slices strings in many ways. The loop iterates through a range of the string
, and it then tests several syntax forms.
for
-loop. We try the start, end, and skip values.# Part 1: the simplest possible example. animal = "bird" print(animal[1:3]) print() # Part 2: more complex syntax for substrings. s = "ABCDEFGHIJKLMNOPQRS" # ... Loop over some indexes. for n in range(2, 4): # ... Print slices. print(n, s[n]) print(n, s[n:n + 2]) print(n, s[n:n + 3]) print(n, s[n:n + 4:2]) print(n, s[n:n + 6:2])ir 2 C 2 CD 2 CDE 2 CE 2 CEG 3 D 3 DE 3 DEF 3 DF 3 DFH
Consider this program. It uses index accesses to get one-character substrings. We can test these substrings in an if
-statement.
value = "web" # Loop over every index in string. for index in range(0, len(value)): # Get one-character substring. char = value[index] # Display substring. print(char) # Test substring. if char == "w": print(True)w True e b
We do not specify a length to get a substring with slice syntax. But when the start is equal to zero, the second argument will be the length.
string = "ABCDEFGH" # Two-character substring. two = string[0:2] # Three-character substring. three = string[0:3] # Four-character substring. four = string[0:4] # Five-character substring. five = string[0:5] print(two) print(three) print(four) print(five)AB ABC ABCD ABCDE
This example shows the relation between the start and the end index. If you want a 3-character slice, add three to the start index (the offset).
string = "ABCDEFGH" # Three characters starting at index 2. offset = 2 length = 3 sliced = string[offset:offset+length] print(sliced)CDE
Sometimes there is no start index in a slice. This simply means the slice starts at zero. So the zero is implicit, assumed, and we can omit it.
value = "RAINY DAY" # Omitting the start means start at 0. test = value[:2] print("OMIT START:", test) test = value[0:2] print("START AT 0:", test)OMIT START: RA START AT 0: RA
A negative start begins the slice based on the last index (the end) not the first. Here we extract the last two characters of a string
.
value = "apple" # Get last two characters. end = value[-2:] print(end)le
A string
cannot be mutated. So we cannot use slice syntax to assign into an existing string
. Instead, we create a new string
—we can concatenate slices.
value = "DotPerls" value[3] = " Net " # Does not work. print(value)Traceback (most recent call last): File "...\program.py", line 4, in <module> value[3] = " Net " # Does not work. ~~~~~^^^ TypeError: 'str' object does not support item assignment
Here we use a string
slice to get the first words in a string
. The first_words
method counts spaces. When it reaches the requested number, it returns a slice of the string
.
first_words
, we extract the first words separated by spaces. A slice is used to take the substring.def first_words(input, words): for i in range(0, len(input)): # Count spaces in the string. if input[i] == ' ': words -= 1 if words == 0: # Return the slice up to this point. return input[0:i] return "" # Test our method. test = "Stately, plump Buck Mulligan came from the stairhead." result = first_words(test, 4) print(result)Stately, plump Buck Mulligan
In Python we extract parts of strings with slices. We can specify an optional start index and an optional last index (not a length). Offsets are useful.