本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Basic/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接: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 1, in <module>
4TypeError: 'str' object does not support item assignment
操作符 |
描述 |
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
函数 |
描述 |
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.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 1, in <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
-
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+++++++++
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 '
本篇文章来源于微信公众号: 码农设计师