目录
在Python中,字符串是处理文本数据的基石。以下将通过具体的代码示例,展示字符串的定义、遍历以及一系列常见的操作。
1. 字符串的定义
Python中的字符串可以使用单引号、双引号或三引号来定义。
# 使用单引号
s1 = 'Hello, world!'
# 使用双引号
s2 = "Python is fun!"
# 使用三引号定义多行字符串
s3 = """This is a
multi-line string example."""
print(s1)
print(s2)
print(s3)
2. 字符串的遍历
遍历字符串意味着按顺序访问其中的每个字符。
# 直接遍历每个字符
s = 'Python'
for char in s:
print(char)
# 根据字符串的索引,遍历字符串
s = "python"
# len()方法可以获取字符串的长度
length = len(s)
for i in range(length):
print(s[i])
3.字符串的常见操作
3.1 字符串拼接与重复
关键点:
- 字符串拼接:使用加号(
+
)操作符连接两个或多个字符串。 - 字符串重复:使用星号(
*
)操作符和重复次数来重复一个字符串。
字符串拼接
# 拼接
s1 = 'Hello, '
s2 = 'world!'
s3 = s1 + s2
print(s3) # 输出: Hello, world!
字符串重复
# 重复
s = 'Python '
s_repeated = s * 3
print(s_repeated) # 输出: Python Python Python
3.2 字符串切片
关键点:
- 切片基础:通过
[start:end]
(其中end
是可选的)来提取子字符串,start
是起始索引(包含),end
是结束索引(不包含)。 - 负索引:使用负索引可以从字符串的末尾开始计数。
- 步长:通过
[start:end:step]
可以指定步长,实现跳过某些字符的切片。步长为负数时,可以实现字符串的倒序输出。 - 倒序输出:使用
[::-1]
可以倒序输出整个字符串
# 字符串切片
s = 'Python Programming'
print(s[0:5]) # 输出: Pytho,从索引0到索引4(不包括5)
print(s[7:14]) # 输出: Program,从索引7到索引13(不包括14)
print(s[-4:]) # 输出: ming,从倒数第四个字符到字符串末尾
# 倒序输出字符串
print(s[::-1]) # 输出:gnimmargorP nohtyP
3.3 字符串查找与替换
关键点:
- 查找:
index(sub[, start[, end]])
:返回子串sub
在字符串中首次出现的索引,从索引start
到end
范围内搜索。如果未找到,则抛出ValueError
。rindex(sub[, start[, end]])
:与index
类似,但从字符串末尾开始搜索。find(sub[, start[, end]])
:返回子串sub
在字符串中首次出现的索引,如果未找到则返回-1。rfind(sub[, start[, end]])
:与find
类似,但从字符串末尾开始搜索。
- 替换:
replace(old, new[, count])
:将字符串中的old
子串替换为new
子串,可选参数count
指定替换的最大次数。如果不指定count
,则替换所有匹配的子串。
查找
print("=========================查找=================================")
s = "我是一个好人一个好男人"
# index 打印字符串中第一次出现查找的 字符串的 索引,若不存在,则会报错
print(s.index("一)) # 2
# rindex 从后往前查找,但索引还是从前开始排列
print(s.rindex("一")) # 3
# find 打印字符串中第一次出现查找的 字符串的 索引,若不存在,则会返回 -1
print(s.find("好人")) # 4
print(s.find("好人0")) # -1
#rfind 从后往前查找,但索引还是从前开始排列
print(s.rfind("人")) # 10
print(s.rfind("男人0")) # -1
替换。
print("=========================替换=================================")
s = "hello world"
print(s.replace("w", "123")) # "hello 123orld"
3.4 字符串分割与连接
关键点:
- 分割:
split([sep[, maxsplit]])
:根据指定的分隔符sep
分割字符串,可选参数maxsplit
指定分割的最大次数。如果不指定sep
,则默认以任何空白字符(如空格、换行符等)作为分隔符。
- 连接:
join(iterable)
:是一个字符串方法,但它被用在连接操作上。它接受一个可迭代对象(如列表、元组、生成器等),其中包含要连接的字符串元素,并使用调用该方法的字符串(作为分隔符)将这些元素连接成一个新的字符串。
分割
print("=========================字符串分隔符=================================")
s = "hello world"
print(s.split()) # 输出: ['hello', 'world'],默认以空白字符分割
print(s.split('o')) # 输出: ['hell', ' w', 'rld'],以字符 'o' 分割
print(s.split('l', 1)) # 输出: ['he', 'lo world'],以字符 'l' 分割,分割一次
print(s.split('x')) # 输出: ['hello world'],分割结果为原始字符串的一个元素,因为找不到分隔符 'x'
连接
print("=========================连接=================================")
# 连接列表中的字符串:
mylist = ["Hello", "World", "Python"]
result = " ".join(mylist)
print(result) # 输出: Hello World Python
# 在这个例子中," ".join(mylist) 将列表 mylist 中的元素用空格连接起来形成一个新的字符串。
# 连接元组中的字符串:
mytuple = ("apple", "banana", "cherry")
result = ", ".join(mytuple)
print(result) # 输出: apple, banana, cherry
# 在这个例子中,", ".join(mytuple) 将元组 mytuple 中的元素用逗号和空格连接起来形成一个新的字符串。
# 连接生成器表达式中的字符串:
generator = (str(num) for num in range(1, 6))
result = "-".join(generator)
print(result) # 输出: 1-2-3-4-5
3.5 字符串清楚前后字符
- 内容:演示了如何使用
strip()
方法去除字符串两侧(开头和结尾)的空白字符或自定义的特定字符。 - 关键点:
strip()
方法默认去除空白字符,但也可以指定其他字符。
print("=========================擦除前后字符=================================")
s = " 我爱我家 "
# 用于去除字符串两侧(开头和结尾)指定的字符(默认为空白字符)。 也可以自定义清楚的符号,比如strip("*")
print(s.strip()) # 我爱我家
3.6 检查字符串
- 内容:展示了如何检查字符串是否只包含数字(
isdigit()
)或是否由字母和数字组成(isalnum()
)。 - 关键点:
isdigit()
检查数字字符,isalnum()
检查字母和数字的组合。
print("=========================检查字符串=================================")
s2 = "123abc"
# 检查字符串是否只包含数字字符
print(s2.isdigit()) # False
# 用于检查字符串是否由字母和数字组成,且至少有一个字符
print(s2.isalnum())
3.7 字符串填充
- 内容:演示了如何对字符串进行填充,包括居中填充(
center()
)、左填充(ljust()
)、右填充(rjust()
)以及使用零进行右填充(zfill()
)。 - 关键点:
center()
,ljust()
,rjust()
,zfill()
方法提供了灵活的字符串格式化选项。
print("=========================填充=================================")
s1 = "许老板"
# 将字符串指定长度居中填充,可以指定填充符号(单字符)
print(s1.center(20, "*"))
# 填充在最左边
print(s1.ljust(20, "*"))
# 填充在最右边
print(s1.rjust(20, "*"))
# 填充在最右边,但是填充的是0
print(s1.zfill(20))
3.8 编码和解码
- 内容:说明了如何将字符串编码为字节序列(
encode()
)以及如何将字节序列解码回字符串(decode()
)。 - 关键点:编码和解码必须使用相同的编码格式,如UTF-8或GBK。
print("=========================解码和编码=================================")
s = "我爱我家"
# 对字符串进行编码 可以指定编码格式 utf8 / gbk 注意,解码和编码的格式需要一致
print(s.encode("utf8"))
print(s.encode("utf8").decode("utf8"))
3.9 判断开头和结尾字符
- 内容:展示了如何使用
startswith()
和endswith()
方法检查字符串是否以特定子串开头或结尾。 - 关键点:
startswith()
和endswith()
方法提供了检查字符串边界的简便方式。
print("=========================判断开头和结尾=================================")
s = "我爱我家"
# 判断字符串是否以。。。开头
print(s.startswith("我")) # True
# 判断字符串是否以。。。结尾
print(s.startswith("家0")) # False
3.10 大小写转换
- 内容:演示了字符串的大小写转换方法,包括首字母大写(
capitalize()
)、全部大写(upper()
)、全部小写(lower()
)、每个单词首字母大写(title()
)以及大小写反转(swapcase()
)。 - 关键点:这些方法提供了灵活的文本处理选项,以满足不同的显示和格式化需求。
print("=========================大小写转换=================================")
c = "aBcd eFg"
# 字符串的第一个字母大写
print(c.capitalize()) # Abcd efg
# 字符串全部大写
print(c.upper()) # ABCD EFG
# 字符串全部小写
print(c.lower()) # abcd efg
# 字符串的 每个单词 首字母大写
print(c.title()) # Abcd Efg
# 字符串的大小写转换 大变小,小变大
print(c.swapcase()) # AbCD EfG
3.11 字符串出现次数计算
- 内容:展示了如何使用
count()
方法计算字符串中子串出现的次数,包括在指定范围内的计数。 - 关键点:
count()
方法提供了灵活的方式来确定子串在字符串中出现的次数,可以指定搜索范围。
print("=========================计算=================================")
s = "我是一个好人,我认真的"
# count 返回查找的字符串出现了多少次,可以指定范围
print(s.count("我")) # 2
print(s.count("我", 0, 6)) # 1