字符串进阶
1. 字符串索引
字符串是一种特殊的对象,可以用索引来访问其单个字符。索引是一个用于访问或操作序列(如字符串、列表或元组)中特定位置的符号。Python中的字符串索引可以是正数或负数。正数索引从字符串的开始处计算,第一个字符的索引是0。负数索引从字符串的末尾开始,最后一个字符的索引是**-1**。
s = "Hello, World"
print(s[0]) # 输出: H
print(s[-1]) # 输出:d
Python的字符串是不可变的,这意味着你不能更改字符串中的特定字符。但是,你可以通过创建一个新的字符串来改变字符串的内容。
s = "Hello, World"
s = s[0] + "c" + s[1:] # 将s中的第二个字符替换为'c'
print(s) # 输出:Hcllo, World
如果尝试访问字符串中不存在的索引,Python会抛出一个IndexError
。
s = "Hello, World!"
print(s[15]) # 抛出IndexError,因为索引15超出了字符串的范围
为了避免这种情况,你可以使用len()
函数来检查字符串的长度。
s = "Hello, World!"
print(len(s)) # 输出:13 len(s)返回字符串的长度。
2.字符串切片
切片语法是 str[start:end:step]
,其中 start
是切片开始的索引, end
是切片结束的索引(不包含该索引位置的字符)。如果 start
或 end
是负数,那么索引将从字符串的末尾开始计数,step
定义了每次移动的字符数,也就是步长。
s = "Hello, World!"
# 从索引2开始到索引8(不包括索引8)
print(s[2:8]) # 输出 "llo, Wor"
# 从字符串的开始位置到索引5
print(s[:5]) # 输出 "Hello"
# 从索引-5到字符串的末尾
print(s[-5:]) # 输出 "orld!"
# 从索引0开始,每隔1个字符取一个,直到索引7
print(s[::2]) # 输出 "Hlo ol!"
3. 字符串格式化
Python字符串格式化是一种非常方便的将变量插入到字符串中的方式。Python提供了几种字符串格式化的方法:
格式化字符 | 含义 |
---|---|
%s | 字符串 |
%d | 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全 |
%f | 浮点数,%.2f 表示小数点后只显示两位 |
%% | 输出 % |
%c | %ASCII字符 |
%o | %8进制 |
%x | %16进制 |
%e | %科学计数法 |
4. 常用的进阶方法
4.1 查找和替换
方法 | 说明 |
---|---|
string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True |
string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否在指定范围内存在,如果不存在,否则返回 -1 |
string.rfind(str, start=0, end=len(string)) | 类似于 find(),从右边开始查找 |
string.index(str,start=0,end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
string.rindex(str,start=0,end=len(string)) | 类似于 index(),不过是从右边开始 |
string.replace(old_str,new_str,num=string.count(old)) | 把 string 中的 old_str 替换成 new_str如果 num 指定,则替换不超过 num 次 |
s = "Hello, World"
print(s.startswith('H')) # 输出 True
print(s.endswith('l')) # 输出 False
print(s.find('e')) # 输出 1
print(s.find('m')) # 输出 -1 因为'm'不存在字符串中,故返回-1
print(s.index('e')) # 输出 1
print(s.replace('ello','i')) # 输出 Hi, World
4.2 判断类型
方法 | 说明 |
---|---|
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
string.isdecimal() | 如果 string 只包含数字则返回 True,全角数字 |
string.isdigit() | 如果 string 只包含数字则返回 True,全角数字、⑴、\u00b2 |
string.isnumeric() | 如果 string 只包含数字则返回 True,全角数字,汉字数字 |
string.istitle() | 如果 string 是标题化的(每个单词的首字母大写)则返回 True |
string.isspace() | 如果 string 中只包含空格,则返回 True |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True |
4.3 拆分和连接
-
字符串拆分
使用split()方法:split()方法是通过指定分隔符将字符串分割成多个子字符串,返回一个列表。
s = "Hello, World" print(s.split(',')) # 输出 ['Hello', ' World']
使用字符串切片:通过指定起始索引和终止索引将字符串分割成多个子字符串
-
字符串连接
使用加号
+
:直接将两个字符串用加号连接起来即可。str1 = "Hello" str2 = "World" str = str1 + "," + str2 print(new_str) # 输出:Hello,World
使用
join()
方法:join()
方法是将一个列表或元组中的所有字符串用指定的分隔符连接成一个新的字符串。str_list = ["Hello", "World"] new_str = " ".join(str_list) print(new_str) # 输出:Hello World
4.4 大小写转换
-
string.upper()
:将字符串中的所有字符转换为大写。str = "Hello, World!" print(str.upper()) # 输出:HELLO, WORLD!
-
string.lower()
:将字符串中的所有字符转换为小写。str = "Hello, World!" print(str.lower()) # 输出:hello, world!
-
string.capitalize()
:将字符串的第一个字符转换为大写,其余转换为小写。str = "Hello, World!" print(str.capitalize()) # 输出:Hello, world!
-
string.title()
:将字符串的每个单词的第一个字符转换为大写,其余转换为小写。str = "Hello, World!" print(str.title()) # 输出:Hello, World!
-
string.swapcase()
:将字符串中的小写字母转换为大写,大写字母转换为小写。str = "Hello, World!" print(str.swapcase()) # 输出:hELLO, wORLD!