字符串是Python中最重要的数据类型之一。在以前的学习中却一直没太重视。因此,今天特地将字符串的一些基本操作记录下来。部分内容参考了《Python基础教程(第3版)》。
序列的通用操作
字符串是Python内置序列(其他的序列类型如列表、元祖等),因此具备通用序列的操作。
索引和切片
字符串的索引和列表一样,都是从0开始,-1表示最后位置的索引。
str1 = "abc123"
print("str1[1] =", str1[1])
print("str1[2: ] =", str1[2: ])
print("str1[0:-1:2] =", str1[0:-1:2]) #从起始位置到结束位置,每隔2个索引取一个值
输出为:
str1[1] = b
str1[2: ] = c123
str1[0:-1:2] = ac2
加法和乘法
字符串加运算可以把多个字符串拼接成一个字符串,乘法运算可以将一个字符串复制若干次。
str2 = "abc"
str3 = "123"
print("str2+str3 =", str2+str3)
print("str2*3 =", str2*3)
输出为:
str2+str3 = abc123
str2*3 = abcabcabc
简单布尔运算:存在性判断
可以通过简单的布尔运算判断一个字符或字符串是否在另一字符串中,并返回True或者False。
str4 = "abcd"
for element in "az":
if element in str4:
print("%s is in %s" %(element, str4))
else:
print("%s is not in %s" %(element, str4))
输出为:
a is in abcd
z is not in abcd
但与列表等数据类型不同的是,字符串不支持直接通过索引修改内容,即下面的代码会报错:
str4 = "abc123"
str4[3] = "d" #报错
报错内容如下:
TypeError: 'str' object does not support item assignment
但如果我们想对字符串做出修改,可以通过下面两种方法实现:
str4 = "abc123"
# 先拆分再重组
print(str4[:3] + "d" + str4[3+1:])
#转化为列表进行操作,再转为字符串
str4_list = list(str4)
str4_list[3] = "d"
print("".join(str4_list))
输入如下:
abcd23
abcd23
字符串格式化
利用字符串格式化可以方便地按我们需要的格式打印出特定的信息,这一点在编程中非常实用。下面介绍Python中字符串格式化的两种常用方法:
- %实现字符串格式化
- format()方法实现字符串格式化
一个简单的示例代码如下:
name = "Meringue"
school = "NJTech"
## ‘%’实现格式化
str5 = "My name is %s, I am now in %s." %(name, school)
print("str5 = ", str5)
## format方法:指定索引(format中的顺序影响索引)
str5 = "My name is {1}, I am now in {0}.".format(school, name)
print("str5 = ", str5)
## format方法:指定参数名(和顺序无关)
str5 = "My name is {name}, I am now in {school}.".format(name=name, school=school)
print("str5 = ", str5)
输出为:
str5 = My name is Meringue, I am now in NJTech.
str5 = My name is Meringue, I am now in NJTech.
str5 = My name is Meringue, I am now in NJTech.
可以看出,以上几种格式化方法输出的内容都相同。相比较而言,使用‘%’更简单,而format()方法使用更加灵活,在实际编程可以按自己的需要使用。
字符串常用方法
借助字符串内置的一些方法可以很方便地对字符串进行处理。字符串内置的方法非常多,这里只介绍最常用的一些方法。完整的官方文档见https://docs.python.org/3/library/stdtypes.html#string-methods
字符串居中:center
center()方法可以将指定的字符串居中,并可以指定其他位置填充的字符(默认为空格填充)
str6 = "abc123"
print(str6.center(10, "*"))
上面中的10表示一共有10个字符,因为str6中一共有6个字符,因此剩下4个字符用指定的’*’在两边填充。输入如下:
**abc123**
查找:find
find()方法可以查找一个字符串中指定的字符和字符串初始位置的索引,如果没有查到,则返回-1。
str6 = "abc123"
print(str6.find("bc")) #返回第一个字符对应的索引或-1(未查找到)
print(str6.find("bc", 1, 4)) #指定起点和终点
find()方法中还可以指定查找的索引范围以提高效率,上面代码中的输出为:
1
1
合并:join
join()方法用来将一个字符串或一个字符串列表中的所有元素用指定的连接符拼接在一起,用法如下:
str6 = "abc123"
str6_list = ["a", "b", "c", "1", "2", "3"]
sep = "--"
print(sep.join(str6)) #用seq将str6合并(连接)在一起
print(sep.join(str6_list)) #join的输入也可以是一个字符串列表
print(sep) #合并后原sep的值不会改变
注意,上面代码中的sep是连接的字符,而str6和str6_list是待连接的字符串和字符串列表,使用时注意不要搞反了。代码输出结果如下:
a--b--c--1--2--3
a--b--c--1--2--3
--
从结果中还可以看出,连接后原来的字符串并没有发生变化,而只是返回了一个新的字符串。
切分:split
join()方法对应的操作是split()切分,即按照指定的字符或字符串对字符串进行切分,并返回切分后的字符串列表。
str6 = "abc123"
print(str6.split("c1")) #切分结果保存在一个字符串列表中(不包含切分的字符)
输出为:
['ab', '23']
替换:replace
replace()可以用来替换一个字符串中指定的子字符串,同样,该方法也只是返回一个新的字符串,而不改变原来字符串的内容。
str6 = "abc123"
print(str6.replace("123", "def")) #返回一个新的字符串
print("str6 = ", str6) #replace不改变原来字符串的值
输出为:
abcdef
str6 = abc123
删除空白:strip、lstrip、rstrip
strip()用于删除左右空白、而lstrip()和rstrip()分别用于删除左边空白和右边空白。在读取文本文件的时候,我们经常需要删除每一行最后的换行符,这个时候可以用rstrip()。
str7 = "\n abc123 \n"
print(str7.strip()) #左右空白
print(str7.lstrip()) #左边空白
print(str7.rstrip()) #右边空白
print(str7) #原字符串内容不变,返回一个新的字符串
输出结果为:
abc123
abc123
abc123
abc123
同样,上面3个方法都不改变原来字符串的内容,只是返回一个新的字符串。