Python - 字符串



在 Python 中,字符串Unicode 字符的不可变序列。根据 UNICODE 标准,每个字符都有一个唯一的数值。但是,即使所有字符都是数字,整个序列也没有任何数值。为了将字符串与数字和其他标识符区分开来,字符序列包含在其文字表示的单引号、双引号或三引号中。因此,1234 是一个数字(整数),而 '1234' 是一个字符串。

创建 Python 字符串

只要包含相同的字符序列,单引号、双引号或三引号就无关紧要。因此,以下字符串表示形式是等效的。


>>> 'Welcome To qikepu'
'Welcome To qikepu'
>>> "Welcome To qikepu"
'Welcome To qikepu'
>>> '''Welcome To qikepu'''
'Welcome To qikepu'
>>> """Welcome To qikepu"""
'Welcome To qikepu'

查看上面的语句,很明显,Python 内部将字符串存储在单引号中。

在旧版本中,字符串在内部存储为 8 位 ASCII,因此需要附加 'u' 以使其成为 Unicode。从 Python 3 开始,所有字符串都以 Unicode 表示。因此,现在不再需要在字符串后添加 'u'。

访问字符串中的值

Python 不支持字符类型;这些被视为长度为 1 的字符串,因此也被视为子字符串。

要访问子字符串,请使用方括号进行切片,并使用索引或索引来获取子字符串。例如 -


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

更新字符串

您可以通过将变量(重新)分配给另一个字符串来“更新”现有字符串。新值可以与其以前的值相关,也可以与完全不同的字符串相关。例如 -


var1 = 'Hello World!'
print ("Updated String :- ", var1[:6] + 'Python')

执行上述代码时,它会产生以下结果 -

Updated String :- Hello Python

请访问 Python - 修改字符串教程,了解有关更新/修改字符串的更多信息。

转义字符

下表是可以用反斜杠表示法表示的转义字符或不可打印字符的列表。

转义字符被解释;在单引号和双引号字符串中。

反斜杠表示法 十六进制字符 描述
\a 0x07 铃声或警报
\b 0x08 退格键
\cx   Control-x
\C-x   Control-x
\e 0x1b Esc键
\f 0x0c 换页
\M-\C-x   元控制-x
\n 0x0a 换行符
\nnn   八进制表示法,其中 n 在 0.7 范围内
\r 0x0d 回车健
\s 0x20 空格健
\t 0x09 Tab健
\v 0x0b “垂直 tab
\x   字符 x
\xnn   十六进制表示法,其中 n 在 0.9、a.f 或 A.F 范围内

字符串特殊运算符

假设字符串变量 a 包含 'Hello',变量 b 包含 'Python',则 -

运算符 描述 示例
+ Concatenation - 在运算符的任一侧添加值 a + b 将给出 HelloPython
* 重复 - 创建新字符串,连接同一字符串的多个副本 a*2 将给出 -HelloHello
[] Slice - 给出给定索引中的字符 a[1] 将得到 e
[ : ] Range Slice - 给出给定范围内的字符 a[1:4] 将给出 ell
in Membership - 如果给定字符串中存在字符,则返回 true H 在 a 中将得到 1
not in Membership - 如果给定字符串中不存在字符,则返回 true M 不在 a 中将得到 1
r/R Raw String - 隐藏 Escape 字符的实际含义。原始字符串的语法与普通字符串的语法完全相同,但原始字符串运算符除外,即引号前面的字母“r”。“r” 可以是小写 (r) 或大写 (R),并且必须放在第一个引号之前。 print r'\n' prints \n and print R'\n'prints \n
% 格式 - 执行字符串格式 请参阅下一节

字符串格式化运算符

Python 最酷的功能之一是字符串格式运算符 %。此运算符对于字符串是唯一的,并且构成了 C 的 printf() 系列中的函数包。下面是一个简单的示例 -


print ("My name is %s and weight is %d kg!" % ('Zara', 21))	

执行上述代码时,它会产生以下结果 -

My name is Zara and weight is 21 kg!

以下是可以与 % 一起使用的完整符号集的列表 -

格式符号 转换
%c 字符
%s 在格式化之前通过 str() 进行字符串转换
%i

 

有符号十进制整数
%d 有符号十进制整数
%u 无符号十进制整数
%o 八进制整数
%x 十六进制整数(小写字母)
%X 十六进制整数(大写字母)
%e 指数表示法(小写 'e')
%E

 

指数表示法(大写 'E')
%f 浮点实数
%g %f 和 %e 中的较小者
%G %f 和 %E 的较短者

下表列出了其他支持的符号和功能 -

符号 功能
* 参数指定宽度或精度
- 左对齐
+ 显示标志
<sp> 在正数前留空格
# 添加八进制前导零 ( '0' ) 或十六进制前导 '0x' 或 '0X',具体取决于使用的是 'x' 还是 'X'。
0 从左到右用零(而不是空格)填充
% '%%' 会留下一个文本 '%'
(var) 映射变量 (字典参数)
m.n. m 是最小总宽度, n 是小数点后要显示的位数(如果 appl)。

请访问 Python - 字符串格式设置教程,了解设置字符串格式的各种方法。

Python 字符串双引号

你想在双引号中嵌入一些文本作为字符串的一部分,字符串本身应该放在单引号中。要嵌入单引号文本,字符串应写在双引号中。


var = 'Welcome to "Python Tutorial" from qikepu'
print ("var:", var)

var = "Welcome to 'Python Tutorial' from qikepu"
print ("var:", var)

它将产生以下输出 -

var: Welcome to "Python Tutorial" from qikepu
var: Welcome to 'Python Tutorial' from qikepu

三重双引号

要用三引号形成字符串,你可以使用三重单引号或三重双引号 - 这两个版本是相似的。


var = '''Welcome to qikepu'''
print ("var:", var)

var = """Welcome to qikepu"""
print ("var:", var)

它将产生以下输出 -

var: Welcome to qikepu
var: Welcome to qikepu

Python 多行字符串

三引号字符串可用于形成多行字符串。


var = '''
Welcome To
Python Tutorial
from qikepu
'''
print ("var:", var)

它将产生以下输出 -

var:
Welcome To
Python Tutorial
from qikepu

带字符串的算术运算符

字符串是一种非数字数据类型。显然,我们不能将算术运算符与字符串操作数一起使用。在这种情况下,Python 会引发 TypeError 。


print ("Hello"-"World")

在执行上述程序时,它将生成以下错误 -


>>> "Hello"-"World"
Traceback (most recent call last):
	 File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'str'

获取 Python 字符串的类型

Python 中的字符串是 str 类的对象。可以用 type() 函数来验证。


var = "Welcome To qikepu"
print (type(var))

它将产生以下输出 -

<class 'str'>

内置字符串方法

Python 包括以下用于操作字符串的内置方法 -

方法 描述
capitalize() 将字符串的首字母大写。
casefold() 将字符串中的所有大写字母转换为小写字母。类似于 lower(),但适用于 UNICODE 字符 alos。
center(width, fillchar) 返回一个带空格的字符串,其中原始字符串以总宽度列为中心。
count(str, beg= 0,end=len(string)) 如果给出了起始索引 beg 和结束索引 end,则计算 str 在 string 或 string 的子字符串中出现的次数。
decode(encoding='UTF-8',errors='strict') 使用为编码注册的编解码器对字符串进行解码。encoding 默认为默认的字符串 encoding。
encode(encoding='UTF-8',errors='strict') 返回编码的字符串版本;on error 时,默认会引发 ValueError,除非 'ignore' 或 'replace' 给出 errors。
endswith(suffix, beg=0, end=len(string)) 确定 string 或 string 的子字符串(如果给出了起始索引 beg 和结束索引 end)是否以 suffix 结尾;如果是这样,则返回 true,否则返回 false。
expandtabs(tabsize=8) 将字符串中的制表符扩展为多个空格;如果未提供 tabSize,则默认为每个制表符 8 个空格。
find(str, beg=0 end=len(string)) 确定 str 是出现在字符串中还是字符串的子字符串中,如果给出起始索引 beg 和结束索引 end,则返回 index (如果找到),否则返回 -1。
format(*args, **kwargs) 此方法用于设置当前字符串值的格式。
format_map(mapping) 此方法还用于格式化当前字符串,唯一的区别是它使用 Map 对象。
index(str, beg=0, end=len(string)) 与 find() 相同,但如果未找到 str 则引发异常。
isalnum() 如果字符串至少有 1 个字符并且所有字符都是字母数字,则返回 true,否则返回 false。
isalpha() 如果字符串至少有 1 个字符并且所有字符都是字母,则返回 true,否则返回 false。
isascii() 返回 True 表示字符串中的所有字符都来自 ASCII 字符集。
isdecimal() 如果 unicode 字符串仅包含十进制字符,则返回 true,否则返回 false。
isdigit() 如果字符串仅包含数字,则返回 true,否则返回 false。
isidentifier() 检查字符串是否为有效的 Python 标识符。
islower() 如果字符串至少有 1 个大小写字符,并且所有大小写字符均为小写,则返回 true,否则返回 false。
isnumeric() 如果 unicode 字符串仅包含数字字符,则返回 true,否则返回 false。
isprintable() 检查字符串中的所有字符是否都可打印。
isspace() 如果字符串仅包含空格字符,则返回 true,否则返回 false。
istitle() 如果字符串正确地 “titlecased” 则返回 true,否则返回 false。
isupper() 如果字符串至少有一个大小写字符并且所有大小写字符均为大写,则返回 true,否则返回 false。
join(seq) 将序列 seq 中元素的字符串表示形式合并(连接)为一个字符串,并带有分隔符 string。
ljust(width[, fillchar]) 返回一个带空格的字符串,其中原始字符串左对齐为总宽度列数。
lower() 将字符串中的所有大写字母转换为小写字母。
lstrip() 删除字符串中的所有前导空格。
maketrans() 返回要在 translate 函数中使用的翻译表。
partition() 在第一次出现 separator 时将字符串拆分为三个字符串元组。
removeprefix() 删除前缀字符串后返回一个字符串。
removesuffix() 删除后缀字符串后返回一个字符串。
replace(old, new [, max]) 将字符串中 old 的所有匹配项替换为 new 或 at most max(如果给定 max)。
rfind(str, beg=0,end=len(string)) 与 find() 相同,但在 string 中向后搜索。
rindex( str, beg=0, end=len(string)) 与 index() 相同,但在 string 中向后搜索。
rjust(width,[, fillchar]) 返回一个带空格填充的字符串,其中原始字符串右对齐为总宽度列数。
rpartition() 在 separator 的 ladt 出现处将字符串拆分为三个字符串元组。
rsplit() 从末尾拆分字符串并返回子字符串列表。
rstrip() 删除 string 的所有尾随空格。
split(str="", num=string.count(str)) 根据分隔符 str (如果未提供空格) 拆分字符串并返回子字符串列表;如果给定,则最多拆分为 num 个子字符串。
splitlines( num=string.count('\n')) 在所有(或num)NEWLINE 处拆分字符串,并返回删除了 NEWLINE 的每一行的列表。
startswith(str, beg=0,end=len(string)) 确定字符串还是字符串的子字符串(如果给出了起始索引 beg 和结束索引 end)是否以子字符串 str 开头;如果是这样,则返回 true,否则返回 false。
strip([chars]) 对字符串执行 lstrip() 和 rstrip()。
swapcase() 对字符串中的所有字母反转大小写。
title() 返回字符串的“titlecased”版本,即所有单词都以大写开头,其余单词为小写。
translate(table, deletechars="") 根据翻译表 str(256 chars) 翻译字符串,删除 del 字符串中的字符串。
upper() 将字符串中的小写字母转换为大写字母。
zfill (width) 将原始字符串 leftpadded 为零返回宽度字符总数;对于数字,zfill() 保留任何给定的符号(减去一个 0)。

带字符串的内置函数

以下是我们可以与字符串一起使用的内置函数 -

函数 描述
len(list) 返回字符串的长度。
max(list) 返回字符串 str 中的最大字母字符数。
min(list) 返回字符串 str 中的最小字母字符。