Python 3 – 字符串
字符串是 Python 中最受欢迎的类型之一。我们只需要在引号中包含字符,就可以创建它们。Python 将单引号视为双引号的相同,简单地将值分配给一个变量即可创建字符串。例如 −
var1 = 'Hello World!'
var2 = "Python Programming"
访问字符串中的值
Python 不支持字符类型;这些被视为长度为一的字符串,也被视为子字符串。
要访问子字符串,请使用方括号进行切片,连同索引或索引以获取子字符串。例如 −
#!/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
更新字符串
可以通过(重新)分配变量来“更新”现有字符串。新值可以与先前的值相关或者与完全不同的字符串相关联。例如 −
#!/usr/bin/python3
var1 = 'Hello World!'
print("更新后的字符串:", var1[:6] + 'Python')
当执行上述代码时,会产生以下结果 −
更新后的字符串: Hello Python
转义字符
下表是可以用反斜杠表示的转义或不可打印字符列表。
转义字符会被解释,即在单引号和双引号字符串中均可使用。
反斜杠表示 | 十六进制字符 | 描述 |
---|---|---|
\a | 0x07 | 响铃或警报 |
\b | 0x08 | 退格 |
\cx | 控制-x | |
\C-x | 控制-x | |
\e | 0x1b | 转义符 |
\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 范围内 |
字符串特殊运算符
假设字符串变量 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 | M not in a 将会得到 1 |
r/R |
原始字符串 – 抑制转义字符的实际意义。原始字符串的语法与正常字符串完全相同,除了原始字符串运算符,即“r”字母,它位于引号之前。 “r” 可以是小写字母 (r) 或大写字母 (R),必须紧接在第一个引号之前放置。 | print r’\n’ 将会打印 \n,print R’\n’ 将会打印 \n。 |
% |
格式化 – 进行字符串格式化 | 见下一节 |
字符串格式化运算符
Python最酷的功能之一是字符串格式化运算符“%”。此运算符仅适用于字符串,并弥补了没有C printf()家族函数的缺陷。以下是一个简单的示例−
#!/usr/bin/python3
print ("My name is %s and weight is %d kg!" % ('Zara', 21))
运行上述代码时,会产生如下结果−
My name is Zara and weight is 21 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 | # 在八进制数前添加前导零(’0’),或在十六进制数前添加 ‘0x’ 或 ‘0X’(取决于使用了 ‘x’ 还是 ‘X’)。 |
6 | 0 左侧用零填充(而不是空格) |
7 | % ‘%%’ 得到单个 ‘%’ 字符 |
8 | (var) 映射变量(字典参数) |
9 | m.n. m 是最小总宽度,n 是小数点后要显示的位数(如果适用) |
三引号
Python 的三引号可帮助字符串跨越多行,包括原样输出的 NEWLINEs、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)
当执行以上代码时,将产生以下结果。请注意,每个特殊字符都已转换为其打印形式,一直到”up.”和闭合三引号之间字符串末尾的最后一个NEWLINE。另请注意,NEWLINE要么在行尾具有显式回车符,要么具有其转义码(\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
现在,让我们使用原始字符串。我们将把表达式放在 r’expression’ 中,如下所示−
#!/usr/bin/python3
print (r'C:\\nowhere')
当执行以上代码时,将产生以下结果−
C:\\nowhere
Unicode字符串
在Python 3中,所有字符串均以Unicode表示。在Python 2中,它们以8位ASCII形式存储,因此需要用’u’来将其转换为Unicode。现在不需要这样做了。
内置字符串方法
Python包括以下内置方法来操作字符串−
序号 | 方法及其描述 |
---|---|
1 | capitalize()将字符串的第一个字符变为大写。 |
2 | center(width, fillchar)返回一个字符串,该字符串使用fillchar填充,并使原始字符串居中到宽度列。 |
3 | count(str, beg = 0,end = len(string))计算字符串或字符串的子串(如果给定了起始索引beg和结束索引end)中str出现的次数。 |
4 | decode(encoding=’UTF-8′,errors=’strict’)使用为编码注册的解码器解码字符串。默认情况下,编码为默认字符串编码。 |
5 | encode(encoding=’UTF-8′,errors=’strict’)返回字符串的编码版本;发生错误时,默认情况下会引发ValueError,除非使用’ignore’或’replace’的errors参数。 |
6 | endswith(suffix, beg=0, end=len(string))确定字符串或字符串的子串(如果给定起始索引beg和结束索引end)是否以后缀结尾;如果是,则返回true,否则返回false。 |
7 | expandtabs(tabsize=8)将字符串中的制表符扩展为多个空格;如果未提供tabsize,则默认为8个空格。 |
8 | find(str, beg=0, end=len(string))确定str是否出现在字符串或字符串的子串中(如果给定了起始索引beg和结束索引end),如果找到,则返回索引,否则返回-1。 |
9 | index(str, beg=0, end=len(string))与find()相同,但如果未找到str,则引发异常。 |
10 | isalnum()如果字符串至少有一个字符且所有字符都是字母数字,则返回true,否则返回false。 |
11 | isalpha()如果字符串至少有一个字符且所有字符都是字母,则返回true,否则返回false。 |
12 | isdigit()如果字符串只包含数字,则返回true,否则返回false。 |
13 | islower()如果字符串至少有一个大小写字母且所有大小写字母都是小写,则返回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])返回一个在原始字符串左对齐到宽度列的空格填充字符串。 |
21 | lower()将字符串中的所有大写字母转换为小写字母。 |
22 | lstrip()删除字符串中所有前导空格。 |
23 | maketrans()返回一个用于在translate函数中使用的翻译表。 |
24 | max(str)返回字符串str中最大的字母字符。 |
25 | min(str)返回字符串str中最小的字母字符。 |
26 | replace(old, new [, max])将字符串中所有出现的旧字符串替换为新字符串,或者如果给定max,则最多替换max次。 |
27 | rfind(str, beg = 0,end = len(string))与find()相同,但在字符串中向后查找。 |
28 | rindex( str, beg = 0, end = len(string))与index()相同,但在字符串中向后查找。 |
29 | rjust(width,[, fillchar])返回一个在原始字符串右对齐到宽度列的空格填充字符串。 |
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。 |