📜  Python字符串String

📅  最后修改于: 2020-09-10 16:00:29             🧑  作者: Mango

在Python中,字符串是表示Unicode字符的字节数组。但是,Python没有字符数据类型。
单个字符就是长度为1的字符串,方括号[]加索引index可用于访问字符串的元素。

创建一个字符串String

Python中的字符串可以使用单引号,双引号甚至三引号来创建:

# Python代码,展示创建字符串String
# 单引号创建字符串
String1 = '欢迎来到芒果文档'
print("单引号创建的字符串: ")
print(String1)
# 双引号创建字符串
String1 = "我是个伟人"
print("\n双引号创建的字符串: ")
print(String1)
# 三引号创建字符串
String1 = '''我是个伟人,我喜欢编程"'''
print("\n双引号创建的字符串: ")
print(String1)
# 三引号创建的字符串,可以跨越多行
String1 = '''芒果
            文档
            真好'''
print("\n多行字符串: ")
print(String1)

输出:

单引号创建的字符串:
欢迎来到芒果文档
双引号创建的字符串:
我是个伟人
三引号创建的字符串:
我是个伟人,我喜欢编程
多行字符串:
芒果
            文档
            真好

在Python中访问字符

在Python中,可以使用索引方法来访问字符串的各个字符。索引允许负地址引用,即以字符串的末端为起点访问字符,例如-1表示最后一个字符,-2表示倒数第二个字符,依此类推。
访问超出范围的索引将导致IndexError。仅允许将Integer作为索引传递,因为float或其他类型将导致索引的TypeError

# Python代码,展示访问字符
String1 = "芒果文档"
print("初始化字符串: ")
print(String1)
# 打印第一个字符
print("\n第一个字符是: ")
print(String1[0])
# 打印最后一个字符
print("\n最后一个字符是: ")
print(String1[-1])

输出: 

初始化字符串
芒果文档
第一个字符是:
芒
最后一个字符是:
档

字符串切片slice

要访问String中的一系列字符,可以使用切片方法。通过使用切片Slicing运算符(:)完成对String的切片。

# Python代码,展示字符串切片
# 创建字符串
String1 = "芒果文档"
print("初始化字符串: ")
print(String1)
# 打印第1第2个字符
print("\n第1~2个字符切片: ")
print(String1[0:2])
# 打印第3个至倒数第一个字符
print("\n第3个~倒数第一个字符切片: ")
print(String1[3:-1])

输出:

初始化字符串:
芒果文档
第1~2个字符切片:
芒果
第3个~倒数第一个字符切片:
文

字符串的删除/更新

在Python中,不允许更新或删除字符串中的字符,这将导致错误,因为不支持更新或从字符串中删除项目。尽管可以使用内置的del关键字删除整个String。这是因为字符串是不可变的,因此一旦分配了字符串,就无法更改其元素。只能将新字符串重新分配给相同的名称。
更新字符:

# Python程序,展示更新字符串string
String1 = "你好,我是芒果文档"
print("初始化: ")
print(String1)
# 更新字符串
String1[2] = 'p'
print("\n更新第二个字符: ")
print(String1)

报出错误:

Traceback (most recent call last):
File “/home/360bb1830c83a918fc78aa8979195653.py", line 10, in
String1[2] = ‘p’
TypeError: ‘str’ object does not support item assignment

更新整个字符串:

# Python代码,展示更新整个字符串
String1 = "你好,我是芒果文档"
print("初始化: ")
print(String1)
# 更新整个string
String1 = "欢迎来到芒果文档"
print("\n更新后的字符串: ")
print(String1)

输出:

初始化:
你好,我是芒果文档
更新后的字符串:
欢迎来到芒果文档

删除字符:

# Python代码,展示删除字符
String1 = "你好,我是芒果文档"
print("初始化字符串: ")
print(String1)
# 删除字符串中index=2的字符
del String1[2]
print("\n正在删除字符串中index为2的字符: ")
print(String1)

报出错误:

Traceback (most recent call last):
File “/home/499e96a61e19944e7e45b7a6e1276742.py", line 10, in
del String1[2]
TypeError: ‘str’ object doesn’t support item deletion

删除整个字符串

使用del关键字可以删除整个字符串。此外,如果我们尝试打印字符串,这将产生错误,因为删除了字符串之后无法打印该字符串。

# Python代码,展示删除整个字符串
String1 = "你好,我是芒果文档"
print("初始化字符串: ")
print(String1)
# 删除整个字符串
del String1
print("\n正在删除: ")
print(String1)

错误:

Traceback (most recent call last):
File “/home/e4b8f2170f140da99d2fe57d9d8c6a94.py", line 12, in
print(String1)
NameError: name ‘String1’ is not defined

Python中的转义序列

在打印带有单引号和双引号的字符串时会导致SyntaxError,因为String已经包含单引号和双引号,因此无法使用这两个引号进行打印。因此,要打印这样的字符串,请使用三引号或转义序列来打印这样的字符串。
转义序列以反斜杠开头,并且可以有不同的解释。如果使用单引号表示字符串,则必须对字符串中存在的所有单引号进行转义,并对双引号进行相同的操作。

# Python代码,展示字符串转义
# 初始化
String1 = '''我是一个芒果"'''
print("用三引号初始化字符串: ")
print(String1)
# 跳过单引号
String1 = 'I\'m a "芒果"'
print("\n忽略单引号: ")
print(String1)
# 跳过爽引号
String1 = "I'm a \"芒果\""
print("\n忽略双引号: ")
print(String1)
# 使用转义,打印路径
String1 = "C:\\Python\\mango\\"
print("\n忽略反斜杠: ")
print(String1)

输出:

用三引号初始化字符串:
我是一个芒果
忽略单引号:
I'm a "芒果"
忽略双引号:
I'm a "芒果"
忽略反斜杠:
C:\Python\mango\

要忽略字符串中的转义序列,请使用rR,这意味着该字符串是原始字符串,并且其内部的转义序列将被忽略。

# Python代码,使用HEX格式打印
String1 = "这是 \x47\x65\x65\x6b\x73 in \x48\x45\x58"
print("\n打印HEX格式,使用转义: ")
print(String1)
# 使用raw string忽略转义
String1 = r"这是 \x47\x65\x65\x6b\x73 in \x48\x45\x58"
print("\n在HEX格式下,打印Raw string: ")
print(String1)

输出:

打印HEX格式,使用转义:
这是 芒果 in HEX
在HEX格式下,打印Raw string:
这是 \x47\x65\x65\x6b\x73 in \x48\x45\x58

字符串格式化

可以使用format()方法来格式化Python中的字符串,这是一种非常通用且功能强大的用于格式化字符串的工具。String中的Format方法包含大括号{}作为占位符,可以根据位置或关键字保存参数以指定顺序。

# Python代码,展示字符串格式化
# 默认顺序
String1 = "{} {} {}".format('芒果', '文档', 'Life')
print("使用默认顺序打印: ")
print(String1)
# 位置格式化
String1 = "{1} {0} {2}".format('芒果', '文档', 'Life')
print("\n使用位置参数打印: ")
print(String1)
# 关键字参数
String1 = "{l} {f} {g}".format(g = '芒果', f = '文档, l = 'Life')
print("\n用关键字的顺序打印: ")
print(String1)

输出:

使用默认顺序打印:
芒果 文档 Life
使用位置参数打印:
文档 芒果 Life
用关键字的顺序打印:
Life 文档 芒果

整数(例如二进制,十六进制等)和浮点数可以使用格式说明符四舍五入或以指数形式显示。

# 整数格式化
String1 = "{0:b}".format(16)
print("\n16的二进制表达 ")
print(String1)
# float格式化
String1 = "{0:e}".format(165.6458)
print("\n指数形式表达165.6458是 ")
print(String1)
# Rounding off 整数
String1 = "{0:.2f}".format(1/6)
print("\none-sixth is : ")
print(String1)

输出:

16的二进制表达
10000
指数形式表达165.6458是
1.656458e+02
one-sixth is :
0.17

可以使用格式说明符将字符串左对齐()或居中(^),并用冒号(:)分隔。

# 字符串对齐
String1 = "|{:<10}|{:^10}|{:>10}|".format('芒果','for','文档')
print("\nLeft, center and right alignment with Formatting: ")
print(String1)
# 展示对齐的空格
String1 = "\n{0:^16} 成立于 {1:<4}!".format("芒果文档", 公元2020年)
print(String1)

输出:

Left, center and right alignment with Formatting:
|芒果     |   for    |     文档|
 芒果文档   was founded in 公元2020年 !

使用运算符不使用format方法即可完成旧样式的格式化

# Python程序,一些老式的格式化烦恼歌发
Integer1 = 12.3456789
print("使用3.2f格式化: ")
print('integer1的值是%3.2f' %Integer1)
print("\n使用3.4f格式化: ")
print('The value of Integer1 is %3.4f' %Integer1)

输出:

使用3.2f格式化:
integer1的值是12.35
使用3.4f格式化:
integer1的值是12.3457

字符串相关方法和函数

内建函数 描述
string.ascii_letters ascii_lowercase和ascii_uppercase常数的串联。
string.ascii_lowercase 小写字母的串联
string.ascii_uppercase 大写字母的串联
string.digits 字符串中的数字
string.hexdigits 字符串中的十六进制
string.letters 字符串小写和大写的串联
string.lowercase 字符串必须包含小写字母。
string.octdigits 字符串中的八位数字
string.punctuation 具有标点符号的ASCII字符。
string.printable 可打印的字符串
String.endswith() 如果字符串以给定的后缀结尾,则返回True;否则返回False。
String.startswith() 如果字符串以给定前缀开头,则返回True;否则返回False。
String.isdigit() 如果字符串中的所有字符都是数字,则返回“ True”,否则,返回“ False”。
String.isalpha() 如果字符串中的所有字符均为字母,则返回“ True”;否则,返回“ False”。
string.isdecimal() 如果字符串中的所有字符均为十进制,则返回true。
str.format() Python3中的一种字符串格式化方法,它允许多次替换和值格式化。
String.index 返回字符串中第一次出现的子字符串的位置
string.uppercase 字符串必须包含大写字母。
string.whitespace 一个字符串,其中包含被视为空格的所有字符。
string.swapcase() 方法将给定字符串的所有大写字符转换为小写,反之亦然,并将其返回
replace() 返回字符串的副本,其中所有出现的子字符串都将被另一个子字符串替换。

不推荐使用的字符串函数

内建功能 描述
string.Isdecimal 如果字符串中的所有字符均为十进制,则返回true
String.Isalnum 如果给定字符串中的所有字符均为字母数字,则返回true。
string.Istitle 如果字符串是标题大写的字符串,则返回True
String.partition 在第一次出现分隔符时分割字符串,并返回一个元组。
String.Isidentifier 检查字符串是否为有效标识符。
String.len 返回字符串的长度。
String.rindex 如果找到子字符串,则返回该字符串内子字符串的最高索引。
String.Max 返回字符串中最高的字母字符。
String.min 返回字符串中的最小字母字符。
String.splitlines 返回字符串中的行列表。
string.capitalize 返回第一个字符大写的单词。
string.expandtabs 用字符串扩展制表符,用一个或多个空格替换它们
string.find 返回子字符串中的最低索引。
string.rfind 找到最高的索引。
string.count 返回字符串中子字符串sub的(不重叠)出现次数
string.lower 返回s的副本,但将大写字母转换为小写字母。
string.split 如果没有可选的第二个参数sep或无,则返回字符串的单词列表
string.rsplit() 返回字符串s的单词列表,从末尾扫描s。
rpartition() 方法将给定的字符串分为三部分
string.splitfields 仅与两个参数一起使用时,返回字符串单词的列表。
string.join 将单词的列表或元组与中间出现的sep连接起来。
string.strip() 它返回删除前导和尾随字符的字符串的副本
string.lstrip 返回删除了前导字符的字符串的副本。
string.rstrip 返回删除了结尾字符的字符串副本。
string.swapcase 将小写字母转换为大写字母,反之亦然。
string.translate 使用表格翻译字符
string.upper 小写字母转换为大写字母。
string.ljust 在给定宽度的字段中左对齐。
string.rjust 在给定宽度的字段中右对齐。
string.center() 在给定宽度的字段中居中对齐。
string.zfill 在左边用零数字填充数字字符串,直到达到给定的宽度。
string.replace 返回字符串s的副本,其中所有出现的子字符串old都替换为new。