📅  最后修改于: 2020-09-10 16:00:29             🧑  作者: Mango
在Python中,字符串是表示Unicode字符的字节数组。但是,Python没有字符数据类型。
单个字符就是长度为1的字符串,方括号[]加索引index可用于访问字符串的元素。
Python中的字符串可以使用单引号,双引号甚至三引号来创建:
# Python代码,展示创建字符串String
# 单引号创建字符串
String1 = '欢迎来到芒果文档'
print("单引号创建的字符串: ")
print(String1)
# 双引号创建字符串
String1 = "我是个伟人"
print("\n双引号创建的字符串: ")
print(String1)
# 三引号创建字符串
String1 = '''我是个伟人,我喜欢编程"'''
print("\n双引号创建的字符串: ")
print(String1)
# 三引号创建的字符串,可以跨越多行
String1 = '''芒果
文档
真好'''
print("\n多行字符串: ")
print(String1)
输出:
单引号创建的字符串:
欢迎来到芒果文档
双引号创建的字符串:
我是个伟人
三引号创建的字符串:
我是个伟人,我喜欢编程
多行字符串:
芒果
文档
真好
在Python中,可以使用索引方法来访问字符串的各个字符。索引允许负地址引用,即以字符串的末端为起点访问字符,例如-1表示最后一个字符,-2表示倒数第二个字符,依此类推。
访问超出范围的索引将导致IndexError。仅允许将Integer作为索引传递,因为float或其他类型将导致索引的TypeError。
# Python代码,展示访问字符
String1 = "芒果文档"
print("初始化字符串: ")
print(String1)
# 打印第一个字符
print("\n第一个字符是: ")
print(String1[0])
# 打印最后一个字符
print("\n最后一个字符是: ")
print(String1[-1])
输出:
初始化字符串
芒果文档
第一个字符是:
芒
最后一个字符是:
档
要访问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
在打印带有单引号和双引号的字符串时会导致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\
要忽略字符串中的转义序列,请使用r或R,这意味着该字符串是原始字符串,并且其内部的转义序列将被忽略。
# 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。 |