在上一节中,我们学习了python数据结构集合set的用法,在本节中我们来学习Python中的字符串String的使用及其相关的操作。

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

1、创建字符串

Python中的字符串可以使用单引号、双引号甚至三引号创建。
# 使用单引号创建一个字符串
String1 = '苏格拉底哲学'
print("使用单引号创建的字符串: ")
print(String1)
# 使用双引号创建一个字符串
String1 = "La Oreja De Van Gogh"
print("\n使用双引号创建的字符串: ")
print(String1)
# 使用三引号创建一个字符串
String1 = '''The Price Of Salt'''
print("\n使用三引号创建的字符串: ")
print(String1)
# 使用三引号创建的字符串允许多行
String1 = '''who
are
you?'''
print("\n多行字符串: ")
print(String1)

2、访问字符串中的字符

在Python中,可以使用索引的方法访问字符串的各个字符。其中索引允许负地址,也技术负索引,负索引从字符串的后面访问字符,例如-1表示最后一个字符,-2表示倒数第二个字符,依此类推。

当访问超出范围的索引时,将导致一个IndexError。Python中只允许使用整数作为索引,使用浮点数或其他类型传递会导致TypeError类型错误。


String1 = "Python and Numpy"
print("初始字符串: ")
print(String1)
# 打印第一个字符(正整数索引)
print("\n第一个字符: ")
print(String1[0])
# 打印最后一个字符(正整数索引)
print("\n最后一个字符: ")
print(String1[len(String1) - 1])
# 打印第一个字符(负整数索引)
print("\n第一个字符: ")
print(String1[-len(String1)])
# 打印最后一个字符(负整数索引)
print("\n最后一个字符: ")
print(String1[-1])

3、字符串分割和切片

要访问字符串中的某个范围的字符,可以使用切片方法。在字符串中切片是通过使用切片操作符(冒号)来完成的。

# 创建一个字符串
String1 = "PythonAndNumpy"
print("初始字符串: ")
print(String1)
# 打印第3个到第9个字符
# 整数索引0开始,索引3字符为'h'
print("\n3-9切片字符: ")
print(String1[3:9])
# 打印第3个到第-2个的字符
print("\n第3个到-2个字符: ")
print(String1[3:-2])

4、更新/删除字符串中的字符

在Python中,不允许从字符串中更新或删除字符,执行这些操作将导致一个错误,因为不支持从字符串中分配项或删除项,虽然使用内置的del关键字可以删除整个字符串。这是因为字符串是不可变的,因此字符串的元素一旦被赋值就不能被改变,只有新的字符串可以重新分配到相同的名称。

String1 = "Python And Numpy"
print("初始字符串: ")
print(String1)
# 更新字符中的字符
String1[2] = 'P'
print("\n更新字符: ")
print(String1)

以上代码会报错:TypeError:

‘str’ object does not support item assignment

下面代码是更新整个字符串,这是允许的:

String1 = "Python And Numpy"
print("初始字符串: ")
print(String1)
# 更新整个字符串
String1 = "SpringBoot"
print("\n更新后的字符串: ")
print(String1)

下面代码是从字符串中删除一个字符,这是不允许的,会报一个错误:TypeError: ‘str’ object doesn’t supp

ort item deletion
String1 = "Python And Numpy"
print("初始字符串: ")
print(String1)
# 更新整个字符串
del String1[2]
print("\n删除一个字符后的字符串: ")
print(String1)

删除整个字符串,使用del关键字可以删除整个字符串。另外,如果我们试图打印字符串,这将产生一个错误:NameError: name ‘String1’ is not defined,因为字符串被删除,无法打印。

String1 = "Python And Numpy"
print("初始字符串: ")
print(String1)
# 更新整个字符串
del String1
print("\n删除后的字符串: ")
print(String1)

5、Python中的转义排序

当打印带有单引号和双引号的字符串时,会导致SyntaxError,因为字符串已经包含单引号和双引号,因此不能使用其中任何一个来打印。因而,要打印这样的字符串,要么使用三重引号,要么使用转义序列来打印这样的字符串。

转义序列以反斜杠开头,可以用不同的方式解释。如果单引号用于表示一个字符串,那么字符串中出现的所有单引号都必须转义,双引号也是如此。

# 初始字符串
String1 = '''I say "Hola"'''
print("使用三重引号的初始字符串: ")
print(String1)
# 单引号转义
String1 = 'I\'m a boy'
print("\n单引号转义: ")
print(String1)
# 双引号转移
String1 = "I'm a \"boy\""
print("\n双引号转移: ")
print(String1)
# 使用转义序列打印路径
String1 = "D:\Python\dev\"
print("\n转移反斜杠: ")
print(String1)
若要忽略字符串中的转义序列,则使用r或R,也就是说该字符串是原始字符串,且其内部的转义序列将被忽略。
# 打印字符串HEX
String1 = "\x48\x45\x58"
print("\n打印转移后的字符串: ")
print(String1)
# 使用原始字符串
# 忽略转义序列
String1 = r"\x48\x45\x58"
print("\nHEX格式字符串: ")
print(String1)

6、字符串格式化

Python中的字符串可以使用format()方法进行格式化,format()方法是一个非常通用且功能强大的字符串格式化函数。
字符串String中的format函数包含大括号{}作为占位符,它可以根据位置或关键字保存参数,以指定顺序。
# 默认顺序
String1 = "{} {} {}".format('La Oreja', 'De', 'Van Gogh')
print("打印默认顺序的字符串: ")
print(String1)
# 按位置格式化
String1 = "{1} {0} {2}".format('La Oreja', 'De', 'Van Gogh')
print("\n位置格式化后的字符串: ")
print(String1)
# 关键字格式化
String1 = "{v} {l} {d}".format(l='La Oreja', d='De', v='Van Gogh')
print("\n关键字格式化后的字符串: ")
print(String1)
使用格式说明符,可以将二进制、十六进制等整数和浮点数四舍五入或以指数形式显示。
# 格式化整数
String1 = "{0:b}".format(16)
print("\n16的二进制表示是 ")
print(String1)
# 浮点数格式化
String1 = "{0:e}".format(165.6458)
print("\n165.6458的指数表示为 ")
print(String1)
# 四舍五入的整数
String1 = "{0:.2f}".format(1 / 6)
print("\n六分之一是 : ")
print(String1)
字符串可以左()或中(^)对齐,使用格式说明符,用冒号(:)分隔。
# 字符串对齐
String1 = "|{:<10}|{:^10}|{:>10}|".format('La Oreja', 'De', 'Van Gogh')
print("\n左中右对齐的字符串: ")
print(String1)
# 空间对齐
String1 = "\n{0:^16}第一张专辑发行年份: {1:<4}!".format("La Oreja De Van Gogh", 1998)
print(String1)
老式的格式化是通过使用%操作符来完成的,没有使用format方法:
Integer1 = 12.3456789
print("格式为3.2f: ")
print('Integer1的值为 %3.2f' %Integer1)
print("\n格式为3.4f: ")
print('Integer1的值为 %3.4f' %Integer1)

7、Python所有字符串常量和字符串操作函数

内置函数说明

string.ascii_letters关联的ascii小写和ascii大写常量。.
string.ascii_lowercase关联的小写字母
string.ascii_uppercase关联的大写字母
string.digits字符串中的数字
string.hexdigits字符串中的hex数
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()返回字符串的副本,其中所有出现的子字符串都被替换为另一个子字符串。

8、已过时的字符串操作函数

内置函数说明

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返回字符串中子字符串出现的次数(不重叠)
string.lower返回string的副本,但将大写字母转换为小写字母。
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的副本,将所有出现的旧字符串替换为新字符串。