1. 字符串的定义和基本操作
字符串是 Python 中最常用的数据类型之一,它用一对单引号(' ')或双引号(" ")表示。定义字符串的方法很简单,直接把一组字符用引号括起来即可,例如:
s1 = 'Hello, World!'
s2 = "Python is a powerful language."
1.1 字符串的拼接
字符串之间可以使用加号(+)进行拼接,拼接后得到的新的字符串就是原来两个字符串的拼接。例如:
s1 = 'Hello, '
s2 = 'world!'
s3 = s1 + s2
print(s3) # 输出:Hello, world!
1.2 字符串的重复
字符串可以使用乘号(*)进行重复,重复后得到的新的字符串就是原字符串重复多次的结果。例如:
s = 'Python '
s = s * 3
print(s) # 输出:Python Python Python
1.3 字符串的切片
字符串可以被当做一个字符序列进行访问,字符串中的每一个字符都有一个索引,索引从0开始。通过使用索引可以访问字符串中的某一个字符,也可以通过切片操作访问字符串中的一段子串。其中,切片的语法格式为:[起始索引:终止索引:步长]。例如:
s = 'Hello, World!'
print(s[0]) # 输出:H
print(s[7:12]) # 输出:World
print(s[:-1:2]) # 输出:Hlo ol!
print(s[::-1]) # 输出:!dlroW ,olleH
2. 字符串的常用方法
2.1 字符串的长度
获取字符串的长度可以使用 len() 方法。例如:
s = 'Python is a powerful language.'
print(len(s)) # 输出:30
2.2 字符串的查找
字符串中查找某个子串可以使用 find()、index() 和 count() 方法。其中,find() 方法用于查找指定字符串是否存在于另一个字符串中,如果存在则返回该子串在原字符串中的索引位置;如果不存在,则返回 -1。
s = 'Python is a powerful language.'
print(s.find('powerful')) # 输出:10
print(s.find('weak')) # 输出:-1
index() 方法与 find() 方法类似,但是当指定的子串不存在于原字符串中时,会引发 ValueError 异常。例如:
try:
print(s.index('weak'))
except ValueError:
print('子串不存在')
count() 方法用于统计一个字符串在另一个字符串中出现的次数。例如:
s = 'To be or not to be, that is the question.'
print(s.count('be')) # 输出:2
2.3 字符串的替换
字符串中某个子串的替换可以使用 replace() 方法。例如:
s = 'Python is a powerful language.'
print(s.replace('Python', 'Java')) # 输出:Java is a powerful language.
2.4 字符串的分割和连接
字符串的分割可以使用 split() 方法,该方法会返回一个列表,列表中的每个元素都是分割后的子串。例如:
s = 'apple, orange, banana, peach'
print(s.split(', ')) # 输出:['apple', 'orange', 'banana', 'peach']
字符串的连接可以使用 join() 方法,该方法需要一个可迭代对象(例如列表、元组等),它会将可迭代对象中的所有元素按照指定的分割符进行连接。例如:
lst = ['apple', 'orange', 'banana', 'peach']
print(', '.join(lst)) # 输出:apple, orange, banana, peach
3. 经典实例:字符串统计与处理
3.1 统计字符串中的单词数
给定一个字符串,要求统计该字符串中单词的个数。单词指的是由大小写字母组成的连续字符序列,单词之间用非字母字符分隔。例如,字符串 'Hello, world! How are you?' 中有5个单词。
解决该问题的思路如下:
1. 首先将整个字符串中的标点符号都替换成空格;
2. 然后使用 split() 方法将字符串按空格进行分割;
3. 最后统计分割后的列表中元素的个数。代码如下:
s = 'Hello, world! How are you?'
s = s.replace(',', ' ').replace('.', ' ').replace('!', ' ').replace('?', ' ')
words = s.split()
print(len(words)) # 输出:5
3.2 反转字符串中的单词顺序
给定一个字符串,要求将字符串中的单词反转顺序后输出。例如,字符串 'Hello, world!' 中单词的顺序应该被反转为 'world! Hello,'。注意,单词中可能包含标点符号。解决该问题的思路如下:
1. 首先将字符串按空格进行分割得到一个单词列表;
2. 然后将单词列表反转;
3. 最后将反转后的单词列表按照空格重新连接成一个字符串。代码如下:
s = 'Hello, world!'
words = s.split()
words.reverse()
s = ' '.join(words)
print(s) # 输出:'world! Hello,'
3.3 替换字符串中的单词
给定一个字符串和两个单词,要求将字符串中所有的第一个单词替换成第二个单词,并输出替换后的字符串。例如,字符串 'Hi, Tom! How are you Tom?',将其中的Tom替换成Jerry后,输出 'Hi, Jerry! How are you Jerry?'。
解决该问题的思路如下:
1. 首先将字符串按空格进行分割得到一个单词列表;
2. 然后遍历该列表,将其中等于第一个单词的单词替换成第二个单词;
3. 最后将替换后的单词列表按照空格重新连接成一个字符串。代码如下:
s = 'Hi, Tom! How are you Tom?'
old_word = 'Tom'
new_word = 'Jerry'
words = s.split()
for i in range(len(words)):
if words[i] == old_word:
words[i] = new_word
s = ' '.join(words)
print(s) # 输出:'Hi, Jerry! How are you Jerry?'