上节中我们了解到了Python
中的字符串的定义方式与JavaScript
类似。通过由单引号'
或双引号"
括起。本节中我们进一步了解关于Python
字符串的函数。
Python
中代码是以换行为结束标志的。与Java
等语言中使用的分号;
不同。
一、多行字符串
Python
中可以通过三对单引号'
或者双引号"
来实现多行字符串。在结果中,换行符插入与代码中相同的位置。
同时在第一节中,我们讲到,多行字符串也可以用来做多行注释。同时它最多的用途就是用于多行注释时使用。
二、字符串即是数组
Python
中没有字符数据类型,单个字符就是长度为 1 的字符串。Python
中的字符串本质就是一个Unicode
字符数组。所以Python
中字符串中的某个字符,可以像数组一样通过下标索引来取得单个字符。同时Python支持负索引。与其他语言一样,Python的正向索引是从前到后,下标是从0开始的。而它的负向索引则是从后到前,下标从-1开始的。
str = "12345"
字符 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
正索引 | 0 | 1 | 2 | 3 | 4 |
负索引 | -5 | -4 | -3 | -2 | -1 |
在输出的数据足够多的时候,我们可以使用代码替换符来格式化输出简化输出,这一点与大学学习的C语言
很像。类似于Java
中的System.out.println()
,因为它默认带一个换行操作。
三、字符串截取
字符串截取从开始索引和结束索引,以冒号分隔,以返回字符串的一部分。遵循包左不右
的原则。
>>> subStr = "Hello world"
>>> print(subStr[2: 5])
llo
这里可以同时使用正索引和负索引,但是需要注意结束索引不能在开始索引之前,否则永远都是空字符串。
>>> str = "hello wolrd!"
>>> str[2:1]
''
>>> str[2:-1]
'llo wolrd'
>>> str[2:-9]
'l'
>>> str[2:-10]
''
只缺省开始索引默认起始位置是0
,缺省结束索引,默认截取从开始索引以后的所有字符。同时缺省开始索引和结束索引时,表示截取整个字符串。
>>> str = "hello wolrd!"
>>> str[:3]
'hel'
>>> str[2:]
'llo wolrd!'
>>> str[:]
'hello wolrd!'
四、字符串拼接
字符串的拼接通过+
号拼接或者格式化的方式拼接。
1.通过+
号拼接
>>> subStr = "Hello world"
>>> joinStr = "join"
# 字符串拼接
>>> print(subStr + " " + joinStr)
Hello world join
2.字符串格式化
①字符串格式化符号
Python
中,字符串格式化的语法与C
中sprintf
函数的语法相同。
# 这里只是借助print()函数输出内容而已。
>>> print("我是%s,正在%s的学习中,今天是第%d天" % ("yanxueer","python",1))
我是yanxueer,正在python的学习中,今天是第1天
>>> "我是%s,正在%s的学习中,今天是第%d天" % ("yanxueer","python",1)
'我是yanxueer,正在python的学习中,今天是第1天'
符号 | 描述 |
---|---|
%c |
格式化字符及其ASCII码 |
%s |
格式化字符串 |
%d |
格式化整数 |
%u |
格式化无符号整型 |
%o |
格式化无符号八进制数 |
%x |
格式化无符号十六进制数 |
%X |
格式化无符号十六进制数(大写) |
%f |
格式化浮点数字,可指定小数点后的精度 |
%e |
用科学计数法格式化浮点数 |
%E |
作用同%e ,用科学计数法格式化浮点数 |
%g |
%f 和%e 的简写 |
%G |
%f 和 %E 的简写 |
%p |
用十六进制数格式化变量的地址 |
②format()
函数:接受一个格式字符串和任意一组位置和关键字参数。将{}替换为值。
# format()函数
>>> formatStr = "我是{},正在{}的学习中 "
>>> print(formatStr.format("yanxueer", "python"))
我是yanxueer,正在python的学习中
-
也可以指定参数顺序,按位置访问参数:
>>> '{0}{1}{2}'.format('yan', 'xue','er')
'yanxueer'
>>> '{1}{2}-{0}'.format('yan', 'xue','er')
'xueer-yan'
>>> '{2}{0}{1}'.format('yan', 'xue','er')
'eryanxue'
>>> '{0}, {1}, {2}'.format(*'abc')
'a, b, c'
它到本质是替代,用0代替了传入到参数,但是实质仍然是参数本身,所以它也具有参数应该具有到特性以及拥有它们到函数。所以:
>>> '{0[0]}{1}{2}'.format('yan', 'xue','er')
'yxueer'
-
按名称访问参数:
>>> "我是{ya}{xe}{er}".format(ya="yan",xe = "xue", er = "er")
'我是yanxueer'
对齐文本以及指定宽度:一个指定的宽度的字符串,默认填充的字符为空格。
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered')
'***********centered***********'
③f-string:字面量格式化字符串
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。
>>> str ="world"
>>> f"hello {str}"
'hello world'
>>> f"{1+2}"
'3'
五、利用制表符或换行符来添加空白
# 制表符
>>> print("\t hello")
hello
# 换行符
>>> print("hello\nworld")
hello
world
Python 转义字符
转义字符 | 描述 |
---|---|
\ (在行尾时) |
续行符 |
\\ |
反斜杠符号 |
\' |
单引号 |
\" |
双引号 |
\a |
响铃 |
\b |
退格(Backspace) |
\e |
转义 |
\000 |
空 |
\n |
换行 |
\v |
纵向制表符 |
\t |
横向制表符 |
\r |
回车 |
\f |
换页 |
\oyy |
八进制数,y 代表 0~7 的字符,例如:\012 代表换行。 |
\xyy |
十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行 |
\other |
其它的字符以普通格式输出 |
六、原始字符串和Unicode 字符串
1.原始字符串:在引号前添加 r 或 R 的字符串。
原始字符串会忽略所有的特殊的转义文字等
>>> print('\u6666')
晦
>>> print(r'\u6666')
\u6666
>>> print('yan \n xueer')
yan
xueer
>>> print(r'yan \n xueer')
yan \n xueer
2.Unicode 字符串
在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
Python3中,所有的字符串都是Unicode字符串。所以带不带u无所谓。
>>> '\u6666'
'晦'
>>> u'\u6666'
'晦'
七、删除空白
关于删除空白,Python
提供了三种不同的删除场景。分别是删除末尾空白rstrip()
、删除开头空白lstrip()
、删除两端空白strip()
1.删除末尾空白
# 删除末尾空白
>>> stripStr = " python "
>>> print(stripStr.rstrip())
python
2.删除开头空白
>>> stripStr = " python "
>>> print(stripStr.lstrip())
python
3.删除两端空白
>>> stripStr = " python "
>>> print(stripStr.strip())
python
八、修改字符串的大小写
1.将字符串的第一个字符转换为大写
>>> "yan xueer".capitalize()
'Yan xueer'
2.单词首字母大写:只有不是连续字符,中间被任何字符分割,空格,逗号,引号等。
>>> str = "hello wolrd!"
>>> str.title()
'Hello Wolrd!'
3.全部大写
>>> str = "hello wolrd!"
>>> str.upper()
'HELLO WOLRD!'
4.全部小写
>>> str = "HELLO WOLRD!"
>>> str.lower()
'hello wolrd!'
九、查找字符串
1. find()
:语法find(str, beg=0, end=len(string))
返回目标字符在字符串中的首次出现的索引位置。如果没有找到对应的索引位置,则返回-1。
>>> "yanxueer".find("e")
5
>>> "yanxueer".find("e",3,8)
5
>>> "yanxueer".find("e",3,5)
-1
>>> "yanxueer".find("z")
-1
2.index()
:语法index(str, beg=0, end=len(string))
返回目标字符在字符串中的首次出现的索引位置。如果没有找到对应的索引位置,则报一个异常。
>>> "yanxueer".index("e")
5
>>> "yanxueer".index("e",3,8)
5
>>> "yanxueer".index("e",3,5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> "yanxueer".index("z")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
3. count()
:语法count(sub, start= 0,end=len(string))
返回目标字符在字符串里出现的次数。
>>> "yanxueer".count("xue")
1
>>> "yanxueer".count("e")
2
>>> "yanxueer".count("z")
0
4. 通过字符串操作符 in
: 存在返回True
不存在返回False
>>> "xue" in "yanxueer"
True
>>> "xe" in "yanxueer"
False
十、字符串替换
replace()
:语法replace(old, new[, max])
,不指定次数默认全部替换。
>>> "yanxueer".replace("e","a",1)
'yanxuaer'
>>> "yanxueer".replace("e","y")
'yanxuyyr'
十一、分割字符串
split()
:语法split(str="", num=string.count(str))
。设置分割次数默认为 -1, 即分隔所有。默认分割为空格
>>> "yan xue er".split()
['yan', 'xue', 'er']
>>> "yan-xue-er".split("-")
['yan', 'xue', 'er']
>>> "yan xue er".split(" ",2)
['yan', 'xue', 'er']
>>> "hello yan xue er ".split(" ",2)
['hello', 'yan', 'xue er ']
十二、join()方法:用于将序列中的元素以指定的字符连接生成一个新的字符串。
>>> "-".join("yanxueer")
'y-a-n-x-u-e-e-r'
# 也可以是字符列表或元组
>>> "-".join(["23","32","32","32"])
'23-32-32-32'
>>> "-".join(("23","32","32","32"))
'23-32-32-32'
十三、字符编码
ord()
函数获取字符的Unicode编码
的整数值,chr()
函数把Unicode编码
的整数值转换为对应的字符。
# ord()函数
>>> ord('晦')
26214
# hex()将整数转换为以“0x”为前缀的小写十六进制字符串
>>> hex(ord('晦'))
'0x6666'
# chr()函数
>>> chr(0x6666)
'晦'
>>> chr(26214)
'晦'
关于常用的字符串操作就到这里,参照官方文档查看更多...
每日一言
任何时候醒悟都为时不晚,最好的时机是之前,其次是现在。