首页Python【Python基础】6.字...

【Python基础】6.字符串类型及其操作


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Basic/lab/index.html
链接:https://pan.baidu.com/s/1x2Ynh_VibPY2u-HWTaJo8w?pwd=mnsj 提取码:mnsj 
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Basic

—————————————————

1.字符串的表示方式及创建:

字符串是字符(字符是书写系统的最小单位,不仅包括字母、数字、汉字、符号、标点,还包括空格或者换行这样的指令)的序列表示,在Python中由一对单引号、双引号或者三引号构成。

1'使用单引号时,"双引号"可以作为字符串的一部分'
2
3"使用双引号时,'单引号'可以作为字符串的一部分"
4
5'''
6三引号可以表示单行字符串,
7也可以表示多行字符串,
8表示多行字符串时可以换行
9'''

可以使用str()函数根据其他数据类型创建字符串。

1>>> str(100)
2'100'
3>>> str(True)
4'True'
5>>> str(1.2e3)
6'1200.0'

不同于其他语言,Python中的字符串是不可变的,即无法修改字符串。

另外,Python中有几种特殊类型的字符串,有引号前面的字母指明:

  • f或F表示用于格式化的f字符串(本文第七部分);

  • r或R表示原始字符串,其中出现的转义序列不会被解释(本文第二部分);

  • fr、FR、Fr、fR组合表示原始f字符串;

  • u表示与普通字符串一样的Unicode字符串;

  • b表示bytes类型的值。

2.字符串中特殊的格式化控制字符:

字符串可以通过增加特殊的格式化控制字符的方式输出特殊效果。

格式化控制字符
描述
转义字符,该字符与其后面相邻的一个字符共同组成新的含义
a
响铃(BEL)
b 退格(BS)
f 换页(FF)
n 换行(LF,光标移动到下行开头
r 回车(CR,光标移动到本行开头
t
水平制表(HT
v 垂直制表(VT
空字符(NULL)


 1>>> print("Pythont编程语言")
2Python    编程语言
3>>> print("Pythonn编程语言")
4Python
5编程语言
6
7# 使用转义符,转义字符串里的单引号或双引号
8>>> print("转义字符串里的"双引号"")
9转义字符串里的"双引号"
10
11# 使用转义符转义反斜线
12>>> print("转义字符串里的反斜线(\)。")
13转义字符串里的反斜线()。

在第一部分提到,原始字符串能够消除转义效果,例如下面的示例(第一个info输出中多出来的反斜线是解释器自己添加的):

1>>> info = r'这是n一个示例'
2>>> info 
3'这是\n一个示例'
4>>> print(info)
5这是n一个示例

3.字符串的索引与切片:

字符串是字符的序列表示,因此具有序号体系,包括正向递增序号和反向递减序号。

  • 正向递增序号:最左侧字符序号为0,向右依次递增;
  • 反向递减序号:最右侧字符序号为-1,向右依次递减;


因为字符串以Unicode编码存储,因此一个英文字符或者一个中文字符都算作一个字符。

正因为字符串具有序号体系,因此可以对字符串进行索引操作,如果指定的序号超过了字符串长度就会产生异常。

  • 序号索引(str[n]):索引序号为n的字符串。
  • 区间索引(str[start:end:step]):返回从序号start到序号end(不包含end,每隔stepg字符提取的子串,也称作切片操作。如果省略start,则从0(字符串起始位置)开始;如果省略end,则提取至字符串结果。

 1>>> name = "Python编程语言"
2# 获取第三个字符
3>>> name[2]
4't'
5# 获取倒数第二个字符
6>>> name[-2]
7'语'
8# 获取第3到第8个字符
9>>> name[2:8]
10'thon编程'
11# 获取第3到倒数第3个字符
12>>> name[2:-2]
13'thon编程'
14# 获取第1到第8个字符
15>>> name[:8]
16'Python编程'
17# 获取第3到最后1个字符
18>>> name[2:]
19'thon编程语言'
20# 每隔1个字符,获取第1到第8个字符
21>>> name[:8:2]
22'Pto编'

因为字符串是不可变类型,因此无法之间向其插入字符或修改特定位置的字符(会报TypeError),如需完成类似操作需要使用后续介绍的一些字符串函数进行。

1>>> name[0] = 'p'
2Traceback (most recent call last):
3  File "<stdin>", line 1in <module>
4TypeError: 'str' object does not support item assignment

4.字符串基本操作符:

Python提供了以下5个基本的字符串操作符。索引和切片操作上面已经有所介绍。

操作符
描述
x + y 拼接xy两个字符串
x * n
复制字符串n次
x in y
判断x是否为y的字串,如是返回True,否则返回False

1>>"Python" + "编程语言"
2'Python编程语言'
3>>"Python编程语言" * 3
4'Python编程语言Python编程语言Python编程语言'
5>>"Python" in "Python编程语言"
6True
7>>"python" in "Python编程语言"
8False

5.内置字符串处理函数:

函数
描述
len()

返回字符串的长度,

也可以返回其他组合数据类型的元素个数

str() 返回任意数据类型所对应的字符串形式
chr() 返回Unicode编码对应的单字符
ord() 返回单字符对应的Unicode编码
hex() 返回整数对应十六进制数的小写形式字符串
oct() 返回整数对应八进制数的小写形式字符串

1>>> name = "Python编程语言"
2>>> len(name)
310
4>>> str(123456)
5'123456'
6>>> ord('○')
79675
8>>> chr(9675)
9'○'
10>>"1 + 1 = 2 " + chr(8730)
11'1 + 1 = 2 √'
12>>"♥对应的Unicode编码是:" + str(ord("♥"))
13'♥对应的Unicode编码是:9829'
14>>> hex(123)
15'0x7b'
16>>> oct(123)
17'0o173'


6.内置字符串处理方法:

在Python解释器内部,所有数据都采用面向对象方式实现,封装为一个类。
因此字符串也是一个类,就具有类似<a>.<b>()形式的字符串处理函数,在面向对象中,这类函数称为方法。

以下是几种常用的字符串处理方法。

6.1 大小写相关操作:

方法
描述
str.lower()
返回字符串的副本,全部字符小写
str.upper() 返回字符串的副本,全部字符大写
str.capitalize() 返回字符串的副本,首字符大写,其余字符小写
str.title() 返回字符串的副本,所有单词的首字母大写
str.swapcase() 返回字符串的副本,交换单词的大小写
str.islower()

当字符串所有字符都是小写时

返回True,否则返回False

str.isupper()

当字符串所有字符都是大写时

返回True,否则返回False


 1>>"THIS IS PYTHON".lower()
2'this is python'
3>>"this is python".upper()
4'THIS IS PYTHON'
5>>"this is python".capitalize()
6'This is python'
7>>"this is python".title()
8'This Is Python'
9>>"This Is Python".swapcase()
10'tHIS iS pYTHON'
11>>"This is python".islower()
12False
13>>"THIS IS PYTHON".isupper()
14True

6.2 分割字符串:

方法
描述
str.split(sep=None,maxsplit=-1) 返回一个列表,由字符串被 sep分隔得到的多个字符串组成。如果给出了 maxsplit,则最多进行 maxsplit 次拆分。如果 maxsplit 未指定或为 -1,则不限制拆分次数

如果split()忽略参数,会使用任意的空白字符序列(换行符、制表符、空格)进行分割。

1>>"welcome,to,python,world".split(",")
2['welcome''to''python''world']
3>>"welcome,to,python,world".split(",",maxsplit=2)
4['welcome''to''python,world']
5>>"welcome tonpythontworld".split()
6['welcome''to''python''world']

6.3 合并字符串:

方法
描述
str.join(iterable)

回一个新字符串,由组合数据类型iterbale变量的每个元素组成,元素间用str字符串分隔

split()相反,join()会根据指定的连接字符合并字符串。
1>>'-'.join(["welcome" , "to" , "python" , "world"])
2'welcome-to-python-world'

6.4 替换字符串:

方法
描述
str.replace(old,new[,count])

返回字符串副本,所有old字串被替换为new,如果给出count参数,则前count次old会被替换为new


1>>"welcome-to-python-world".replace("-",",")
2'welcome,to,python,world'
3>>"welcome-to-python-world".replace("-",",",2)
4'welcome,to,python-world'

6.5 移除指定字符:

方法
描述
str.strip([chars])

在字符串左右两侧去掉chars后的字符串

str.rstrip([chars]) 在字符串右两侧去掉chars后的字符串
str.lstrip([chars]) 在字符串左两侧去掉chars后的字符串

strip()函数如果忽略参数,会假定删除的是空白字符(”、”n、’t’),也可以删除多个字符。

 1>>"***welcome to python world***".strip("*")
2'welcome to python world'
3>>"***welcome to python world***".rstrip("*")
4'***welcome to python world'
5>>"***welcome to python world***".lstrip("*")
6'welcome to python world***'
7# strip()函数如果忽略参数,会假定删除的是空白字符(''、''n、't')
8>>"   welcome to python world   ".strip()
9'welcome to python world'
10# strip()函数也可以删除多个字符
11>>"welcome to python world..!!??".strip('.!?')
12'welcome to python world'

6.6 判断字符串是否以指定后缀开始或结尾

方法
描述
str.endswith(suffix[,start[,end]])

当str[start,end]部分以suffix结尾,

返回True,否则返回False

str.startswith(prefix[,start[,end]])

当str[start,end]部分以prefix开始

返回True,否则返回False


1>>"welcome to python world".startswith("we")
2True
3>>"welcome to python world".endswith("world")
4True
5>>"welcome to python world".endswith("e",1,7)
6True

6.7 搜索字符串:

方法
描述
str.find(sub,start,end) 用于检测字符串中是否包含参数字符串。若包含,则返回字符串中第一次出现参数字符串的位置,否则返回-1。也可以指定起始末尾偏移量来指定字符串的范围。
str.rfind(sub,start,end) 与find()类似。不过返回参数字符串在字符串中最后一次出现的位置。
str.index(sub,start,end) 用于检测字符串中是否包含参数字符串。若包含,则返回字符串中第一次出现参数字符串的位置,否则产生一个ValueError异常。也可以指定起始末尾偏移量来指定字符串的范围。
str.rindex(sub,start,end) index()类似。不过返回参数字符串在字符串中最后一次出现的位置。
str.count(sub[,start[,end]])
返回str[start,end]部分中sub字串出现的次数

 1>>"Python编程语言Python".find('P')
20
3>>"Python编程语言Python".rfind('P')
410
5>>"Python编程语言Python".index('P')
60
7>>"Python编程语言Python".rindex('P')
810
9>>"Python编程语言Python".find('P',1,5)
10-1
11>>"Python编程语言Python".index('P',1,5)
12Traceback (most recent call last):
13  File "<stdin>", line 1in <module>
14ValueError: substring not found
15>>"Python编程语言Python".count("y")
162

6.8 对齐操作:

方法
描述
str.center(width[,fillchar]) 按照width宽度,将字符串居中,两边填充指定字符fillchar(默认是空格)
str.ljust(width[, fillchar])

将原字符串左对齐,并使用指定字符(默认空格)填充至指定长度width,并返回新的字符串。如果指定的长度小于原字符串长度,则返回的字符串与原字符串相同

str.rjust(width[, fillchar]) 将原字符串右对齐,并使指定字符(默认空格)填充至指定长度width,并返回新的字符串。如果指定的长度小于原字符串长度,则直接新返回的字符串与原字符串相同。
str.zfill(width) 将原有字符串变为长度为width,字符串右对齐不足部分用0填充


 1>>"Python编程语言".center(16,"+")
2'+++Python编程语言+++'
3>>"Python编程语言".ljust(16)
4'Python编程语言      '
5>>"Python编程语言".ljust(16,"+")
6'Python编程语言++++++'
7>>"Python编程语言".rjust(16)
8'      Python编程语言'
9>>"Python编程语言".zfill(16)
10'000000Python编程语言'

6.9 其他操作:

方法
描述
str.isprintable()

当字符串所有字符都是可打印时

返回True,否则返回False

str.isnumeric()

当字符串所有字符都是数字时

返回True,否则返回False

str.isspace()

当字符串所有字符都是空格时

返回True,否则返回False


1>>"Python".isprintable()
2True
3>>"Python123".isnumeric()
4False
5>>"123456".isnumeric()
6True
7>>"  ".isspace()
8True

7.字符串格式化方法:

当前Python主流版本中,主要有以下3种字符串格式化方法。
  • C语言风格的基于百分号%的格式化语句,该方式历史最为悠久,但是现在已较少使用;
  • Python2.6新增的新式字符串格式化方法str.format()方式;
  • Python3.6新增的字符串字面量格式化f-string表达式,该方式使用起来最为方便简洁,推荐使用。该方法直接在起始引号前输入字母f或F,在花括号内输入变量名称或者表达式;

 1>>> name = "Tom"
2>>> age = 18
3# %方式
4>>> print(("学生姓名为: %s ,年龄为: %d ") % (name , age))
5学生姓名为:Tom ,年龄为: 18 
6
7# str.format()方式
8>>> print(("学生姓名为:{} ,年龄为:{}").format(name , age))
9学生姓名为:Tom ,年龄为:18
10
11# f-string方式
12>>> print(f"学生姓名为:{name} ,年龄为:{age}")
13学生姓名为:Tom ,年龄为:18

f-string方式在花括号内也可以使用以下格式打印参数:

  • 起始冒号(’:’);

  • 可选的填充字符,在字符串不足最小宽度时做填充使用,默认为空格;
  • 可选的对齐字符,‘<’表示左对齐,’>’表示右对齐,’^’表示居中对齐,默认为左对齐;
  • 可选的最小宽度,可选的点号(‘.’)用于分隔最小宽度和最大字符数;
  • 可选的最大字符数。
1>>> print(f"学生姓名为:{name:>20.2} ,年龄为:{age:+^20}")
2学生姓名为:                  To ,年龄为:+++++++++18+++++++++
从Python3.8版本开始,在打印变量名及其值时,f字符串有了一种新的便捷写法,这在调试代码时非常方便。
将等号=放在f字符串的花括号内的变量名称之后即可,变量名称也可以是表达式,等号之后也可以使用上面介绍的格式化参数。
1>>> f'{name=} , {age=}'
2"name='Tom' , age=18"
3>>> f'{name.lower()=} , {age*2=}'
4"name.lower()='tom' , age*2=36"
5>>> f'{name.lower()=:>20.2} , {age*2=:^20}'
6'name.lower()=                  to , age*2=         36         '

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments