字符串是Python中最受欢迎、最常使用的数据类型。可以通过用引号括起字符来创建它们。 Python将单引号与双引号相同。创建字符串和向一个变量赋值一样简单。 例如 -
var1 = 'Hello World!' var2 = "Python Programming"
1.访问字符串中的值
Python不支持字符类型; 字符会被视为长度为1
的字符串,因此也被认为是一个子字符串。要访问子串,请使用方括号的切片加上索引或直接使用索引来获取子字符串。 例如 -
#!/usr/bin/python3 var1 = 'Hello World!' var2 = "Python Programming" print ("var1[0]: ", var1[0]) print ("var2[1:5]: ", var2[1:5]) # 切片加索引
当执行上述代码时,会产生以下结果 -
var1[0]: H
var2[1:5]: ytho
2.更新字符串
可以通过将变量分配给另一个字符串来“更新”现有的字符串。 新值可以与其原值相关或完全不同的字符串。 例如 -
#!/usr/bin/python3 var1 = 'Hello World!' print ("Updated String :- ", var1[:6] + 'Python')
当执行上述代码时,会产生以下结果 -
Updated String :- Hello Python
3.转义字符
下表是可以用反斜杠表示法表示转义或不可打印字符的列表。单引号以及双引号字符串的转义字符被解析。
反斜线符号 | 十六进制字符 | 描述/说明 |
---|---|---|
\a | 0x07 | 铃声或警报 |
\b | 0x08 | 退格 |
\cx | Control-x | |
\C-x | Control-x | |
\e | 0x1b | Escape |
\f | 0x0c | 换页 |
\M-\C-x | Meta-Control-x | |
\n | 0x0a | 新一行 |
\nnn | 八进制符号,其中n 在0.7范围内 | |
\r | 0x0d | 回车返回 |
\s | 0x20 | 空格 |
\t | 0x09 | 制表符 |
\v | 0x0b | 垂直制表符 |
\x | 字符x | |
\xnn | 十六进制符号,其中n 在0~9 ,a~f 或A~F 范围内 |
4.字符串特殊运算符
假设字符串变量a
保存字符串值’Hello
‘,变量b
保存字符串值’Python
‘,那么 -
运算符 | 说明 | 示例 |
---|---|---|
+ | 连接 - 将运算符的两边的值添加 | a + b 结果为 HelloPython |
* | 重复 - 创建新字符串,连接相同字符串的多个副本 | a*2 结果为 HelloHello |
[] | 切片 - 给出指定索引中的字符串值,它是原字符串的子串。 | a[1] 结果为 e |
[:] | 范围切片 - 给出给定范围内的子字符串 | a[1:4] 结果为 ell |
in | 成员关系 - 如果给定字符串中存在指定的字符,则返回true | 'H' in a 结果为 1 |
not in | 成员关系 - 如果给定字符串中不存在指定的字符,则返回true | 'Y' not in a 结果为 1 |
r/R | 原始字符串 - 抑制转义字符的实际含义。原始字符串的语法与正常字符串的格式完全相同,除了原始字符串运算符在引号之前加上字母“r ”。 “r ”可以是小写(r )或大写(R ),并且必须紧靠在第一个引号之前。 | print(r'\n') 将打印 \n ,或者 print(R'\n') 将打印 \n ,要注意的是如果不加r 或R 作为前缀,打印的结果就是一个换行。 |
% | 格式 - 执行字符串格式化 | 请参见本文第5节 |
5.字符串格式化运算符
Python最酷的功能之一是字符串格式运算符%
。 这个操作符对于字符串是独一无二的,弥补了C语言中 printf()
系列函数。 以下是一个简单的例子 -
#!/usr/bin/python3 print ("My name is %s and weight is %d kg!" % ('Maxsu', 71))
当执行上述代码时,会产生以下结果 -
My name is Maxsu and weight is 71 kg!
以下是可以与%
符号一起使用的完整符号集列表 -
编号 | 格式化符号 | 转换 |
---|---|---|
1 | %c | 字符 |
2 | %s | 在格式化之前通过str() 函数转换字符串 |
3 | %i | 带符号的十进制整数 |
4 | %d | 带符号的十进制整数 |
5 | %u | 无符号十进制整数 |
6 | %o | 八进制整数 |
7 | %x | 十六进制整数(小写字母) |
8 | %X | 十六进制整数(大写字母) |
9 | %e | 指数符号(小写字母’e ‘) |
10 | %E | 指数符号(大写字母’E ‘ |
11 | %f | 浮点实数 |
12 | %g | %f 和%e |
13 | %G | %f 和%E |
其他支持的符号和功能如下表所列 -
编号 | 符号 | 功能 |
---|---|---|
1 | * | 参数指定宽度或精度 |
2 | - | 左对齐 |
3 | + | 显示标志或符号 |
4 | <sp> | 在正数之前留空格 |
5 | # | 根据是否使用“x ”或“X ”,添加八进制前导零(‘0 ‘)或十六进制前导’0x ‘或’0X ‘。 |
6 | 0 | 使用零作为左边垫符(而不是空格) |
7 | % | ‘%% ‘留下一个文字“% ” |
8 | (var) | 映射变量(字典参数) |
9 | m.n. | m 是最小总宽度,n 是小数点后显示的位数(如果应用) |
6.三重引号
Python中的三重引号允许字符串跨越多行,包括逐字记录的新一行,TAB
和任何其他特殊字符。
三重引号的语法由三个连续的单引号或双引号组成。
#!/usr/bin/python3 para_str = """this is a long string that is made up of several lines and non-printable characters such as TAB ( \t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \n ], or just a NEWLINE within the variable assignment will also show up. """ print (para_str)
当执行上述代码时,会产生以下结果。注意每个单独的特殊字符如何被转换成其打印形式,它是直到最后一个NEWLINEs
在“up
”之间的字符串的末尾,并关闭三重引号。 另请注意,NEWLINEs
可能会在一行或其转义码(\n
)的末尾显式显示回车符 -
this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up.
原始字符串根本不将反斜杠视为特殊字符。放入原始字符串的每个字符都保持所写的方式 -
#!/usr/bin/python3 print ('C:\\nowhere')
当执行上述代码时,会产生以下结果 -
C:\nowhere
现在演示如何使用原始的字符串。将表达式修改为如下 -
#!/usr/bin/python3 print (r'C:\\nowhere')
当执行上述代码时,会产生以下结果 -
C:\\nowhere
7.Unicode字符串
在Python 3中,所有的字符串都用Unicode表示。在Python 2内部存储为8
位ASCII,因此需要附加’u
‘使其成为Unicode,而现在不再需要了。
内置字符串方法
Python包括以下内置方法来操作字符串 -
编号 | 方法 | 说明 |
---|---|---|
1 | capitalize() | 把字符串的第一个字母转为大写 |
2 | center(width, fillchar) | 返回使用fillchar 填充的字符串,原始字符串以总共width 列为中心。 |
3 | count(str, beg = 0,end = len(string)) | 计算字符串中出现有多少次str 或字符串的子字符串(如果开始索引beg 和结束索引end ,则在beg ~end 范围匹配)。 |
4 | bytes.decode(encoding="utf-8", errors="strict") | Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 |
5 | encode(encoding = ‘UTF-8’,errors = ‘strict’) | 返回字符串的编码字符串版本; 在错误的情况下,默认是抛出ValueError ,除非使用’ignore ‘或’replace ‘给出错误。 |
6 | endswith(suffix, beg = 0, end = len(string)) | 确定字符串或字符串的子字符串(如果启动索引结束和结束索引结束)都以后缀结尾; 如果是则返回true ,否则返回false 。 |
7 | expandtabs(tabsize = 8) | 将字符串中的制表符扩展到多个空格; 如果没有提供tabize ,则默认为每个制表符为8 个空格。 |
8 | find(str, beg = 0 end = len(string)) | 如果索引beg 和结束索引end 给定,则确定str 是否在字符串或字符串的子字符串中,如果找到则返回索引,否则为-1 。 |
9 | index(str, beg = 0, end = len(string)) | 与find() 相同,但如果没有找到str ,则引发异常。 |
10 | isalnum() | 如果字符串至少包含1 个字符,并且所有字符均为数字,则返回true ,否则返回false 。 |
11 | isalpha() | 如果字符串至少包含1 个字符,并且所有字符均为字母,则返回true ,否则返回false 。 |
12 | isdigit() | 如果字符串只包含数字则返回true ,否则返回false 。 |
13 | islower() | 如果字符串至少包含1 个字母,并且所有字符均为小写,则返回true ,否则返回false 。 |
14 | isnumeric() | 如果unicode 字符串只包含数字字符,则返回true ,否则返回false 。 |
15 | isspace() | 如果字符串只包含空格字符,则返回true ,否则返回false 。 |
16 | istitle() | 如果字符串正确“标题大小写”,则返回true ,否则返回false 。 |
17 | isupper() | 如果字符串至少包含一个可变大小写字符,并且所有可变大小写字符均为大写,则返回true ,否则返回false 。 |
18 | join(seq) | 将序列seq 中的元素以字符串表示合并(并入)到具有分隔符字符串的字符串中。 |
19 | len(string) | 返回字符串的长度 |
20 | ljust(width[, fillchar]) | 返回一个空格填充的字符串,原始字符串左对齐到总共width 列。 |
21 | lower() | 将字符串中的所有大写字母转换为小写。 |
22 | lstrip() | 删除字符串中的所有前导空格 |
23 | maketrans() | 返回在translate 函数中使用的转换表。 |
24 | max(str) | 从字符串str 返回最大字母字符。 |
27 | replace(old, new [, max]) | 如果给定max 值,则用new 或最多最大出现替换字符串中所有出现的旧字符(old )。 |
28 | rindex( str, beg = 0, end = len(string)) | 与index() 相同,但在字符串中向后搜索。 |
29 | rjust(width,[, fillchar]) | 返回一个空格填充字符串,原始字符串右对齐到总共宽度(width )列。 |
30 | rstrip() | 删除字符串的所有尾随空格。 |
31 | split(str="", num=string.count(str)) | 根据分隔符str (空格,如果没有提供)拆分字符串并返回子字符串列表; 如果给定,最多分割为num 子串。 |
32 | splitlines( num=string.count(‘\n’)))”) | 全部拆分字符串(或num )新行符,并返回每行的列表,并删除新行符。 |
33 | startswith(str, beg=0,end=len(string)) | 确定字符串或字符串的子字符串(如果给定起始索引beg 和结束索引end )以str 开头; 如果是则返回true ,否则返回false 。 |
34 | strip([chars]) | 对字符串执行lstrip() 和rstrip() |
35 | swapcase() | 反转在字符串中的所有字母大小写,即小写转大写,大写转小写。 |
36 | title() | 返回字符串的标题版本,即所有单词第一个字母都以大写开头,其余的都是小写的。 |
37 | translate(table, deletechars= | 根据转换表STR(256个字符),除去那些在del 字符串转换字符串。 |
38 | upper() | 将字符串中的小写字母转换为大写。 |
39 | zfill(width) | 返回原始字符串,左边填充为零,总共有宽度(width )字符; 对于数字zfill() 保留给定的任何符号(少于一个零)。 |
40 | isdecimal() | 如果unicode字符串只包含十进制字符,则返回true ,否则返回false 。 |