---
tags: Python Workshop 沈煒翔
---
# Lesson 5: String Manipulation
## String
In most programming languages, a character is a single letter and a string is a sequence of characters. However, there is only string in Python.
```python
# All these are considered "str" data type in Python
s1 = "a"
s2 = 'abcdefg' # ' and " are the same
s3 = 'I like to eat apple.'
s4 = '今天天氣不錯'
```
Strings in Python are arrays of single characters.
```python
s = 'Hello World'
# We can index the characters using its integer position
print(s[0])
# >>> H
# We can loop through a string using for loop
for c in 'Hello':
print(c)
# >>> H
# >>> e
# >>> l
# >>> l
# >>> o
```
It shares many properties with list.
```python
s = 'Hello'
l = [1, 2, 3]
# len() to check the length of the string
print(len(s)) # >>> 5
print(len(l)) # >>> 3
# "in" to check if a substring exists
'ello' in s # >>> True
'e' in s # >>> True
5 in l # >>> False
# slicing to slice the string
print(s[1:3]) # >>> 'el'
print(l[1:3]) # >>> [2, 3]
```
In Python, strings are immutable (like tuple), which means it cannot be changed.
## String operators
'+' is for concatenate
```python
s1 = 'Hi!'
s2 = 'Hello!'
s3 = s1 + s2 # >>> 'Hi!Hello!'
```
'*' is for repetition
```python
s1 = 'Hey!'
s2 = s1 * 3 # >>> 'Hey!Hey!Hey!'
```
'==' and '!=' for comparison
```python
'Apple' == 'Apple' # >>> True
'Apple' == 'apple' # >>> False
```
### Exercise
Change every 'e' to 'a' in the given string.
```python
s = 'I like to eat apples.'
```
```python
s = 'I like to eat apples.'
s2 = ''
for ch in s:
if ch != 'e':
# s2 = s2 + ch
s2 += ch
else:
s2 += 'a'
print(s2)
```
Decode the following encryption.
```python
inputs = '3a1b5c'
# Hint: you can cast string to int like this: int('5') -> 5
print('aaabccccc')
```
```python
inputs = '3a1b5c'
s2 = ''
for i, ch in enumerate(inputs):
if i % 2 == 0:
s2 += inputs[i+1] * int(ch)
print(s2)
```
```python
inputs = '3a1b5c'
s2 = ''
for i, ch in enumerate(inputs):
if i % 2 == 0:
num = int(ch)
else:
s2 += inputs[i+1] * num
print(s2)
```
```python
inputs = '3a1b5c'
s2 = ''
for i, ch in enumerate(inputs):
if ch in ['1','2','3','4','5','6','7','8','9','0']:
num = int(ch)
else:
s2 += ch * num
print(s2)
```
## Useful string functions
In dictionaries, we can use .keys() to get all the keys, .values() to get all the values. There are the built-in functions of the dictionary data type.
In string, there are also **a lot of** built-in functions that you can use. You don't need to remember all of them.
Upper case and lower case
```python
s = 'Hello World!'
print(s.upper()) # >>> 'HELLO WORLD!'
print(s.lower()) # >>> 'hello world!'
```
Replace string
```python
s1 = 'I like apples.'
s2 = s1.replace('apples', 'grapes') # replace the first substring with the second substring
print(s2) # >>> 'I like grapes.'
```
Split string
```python
s1 = "Hello, World!"
s2 = s1.split(",") # split the string into a list of strings with the separator
print(s2) # >>> ['Hello', ' World!']
# If no separator is specified, white space is used.
s1 = "Hello, World!"
s2 = s1.split()
print(s2) # >>> ['Hello,', 'World!']
```
### Exercise
Split the strings into words.
```python
s = 'Last Friday, I skipped the class.'
# >>> ['Last', 'Friday', 'I', 'skipped', 'the', 'class']
```
## String formatting
We can format the string to include some variables inside the string. We put a 'f' before the string to let Python know we are formmating this string and use the {} syntax for formatting.
```python
age = 15
name = 'Jack'
s = f'{name} is {age}.'
```
There is some other ways to format the Python string, but not recommended. However, some people still use it so we better know what they're doing.
```python
age = 15
name = 'Jack'
s = '%s is %d.' % (name, age) # you have to remember the code
s = '{} is {}.'.format(name, age) # bad readability
```
Also, we can use string formatting when dealing with float numbers. The syntax is
```python
f'{value:{width}.{precision}}'
```
value: the number you want to print
width: the number of characters used for display (may exceed)
precision: the number of characters used after the decimal point
```python
pi = 3.14159265
print(f'{pi}') # >>> '3.14159265'
print(f'{pi:.2f}') # >>> '3.14'
print(f'{pi:5.2f}') # >>> ' 3.14'
print(f'{pi:05.2f}') # >>> '03.14'
# the f here is for floating numbers, use 'd' for integer
```
### Exercise
Print the given list in a beautiful right-aligned way
```python
l = [1.35, 2, 3.3578, -3.56, 1/7]
```

## Practice
https://leetcode.com/problems/two-sum/
https://leetcode.com/problems/single-number/