Python字符串

字符串是 Python 中表示字符序列的数据结构。它是一种不可变的数据类型,这意味着一旦创建了字符串,就无法更改它。字符串广泛用于许多不同的应用程序,例如存储和操作文本数据。

在Python中我们使用单引号或双引号来表示字符串。例如:

# create a string using double quotes
string1 = "Python programming"

# create a string using single quotes
string1 = 'Python programming'

在这里,我们创建了一个名为的字符串变量string1,该变量使用字符串进行初始化。

访问Python字符串中的字符

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

注意:如果我们尝试访问超出范围的索引或使用整数以外的数字,我们将收到错误。

例子:

在此示例中,我们将在 Python 中定义一个字符串,并使用正索引和负索引访问其字符。第 0 个元素将是字符串的第一个字符,而第 -1 个元素是字符串的最后一个字符。

# Python程序,访问字符串的字符

# 定义一个字符串
String1 = "jkhxw"

# 打印初始字符串
print("初始字符串:")
print(String1)

# 打印字符串的第一个字符
print("\n字符串的第一个字符是:")
print(String1[0])

# 打印字符串的最后一个字符
print("\n字符串的最后一个字符是:")
print(String1[-1])

输出:

初始字符串:
jkhxw
字符串的第一个字符是:
j
字符串的最后一个字符是:
w

字符串切片

在Python中,字符串切片方法用于访问字符串中的一定范围的字符。对字符串进行切片是通过使用切片运算符(即冒号 (:))来完成的。使用此方法时要记住的一件事是,切片后返回的字符串包含起始索引处的字符,但不包含最后一个索引处的字符。

例子:

在本例中,我们将使用字符串切片方法来提取原始字符串的子字符串。[3:12]表示字符串切片将从字符串的第3个索引开始到第12个索引(不包括第12个字符)。我们还可以在字符串切片中使用负索引。

# Python程序,演示字符串切片

# 创建一个字符串
String1 = "lovejkhxw"
print("初始字符串:")
print(String1)

# 打印第3到第8个字符
print("\n切片从第3到第8个字符:")
print(String1[3:8])

# 打印第3个字符到倒数第2个字符之间的字符
print("\n切片从第3个字符到倒数第2个字符之间的字符:")
print(String1[3:-2])

输出:

初始字符串:
lovejkhxw

切片从第3到第8个字符:
ejkhx

切片从第3个字符到倒数第2个字符之间的字符:
ejkh

反转字符串

通过访问字符串中的字符,我们还可以在 Python 中反转字符串。我们可以使用字符串切片方法来反转字符串。

例子:

在此示例中,我们将通过访问索引来反转字符串。我们没有指定切片的前两个部分,这表明我们正在考虑整个字符串,从开始索引到最后一个索引。

# 反转一个字符串
gfg = "jkhxw"

# 使用切片操作[::-1]来反转字符串
print(gfg[::-1])

输出:

wxhkj

例子:

我们还可以使用内置的join和reversed函数来反转字符串,并将字符串作为参数传递给 returned() 函数。

# 反转一个字符串
gfg = "jkhxw"

# 使用 reversed 函数反转字符串并使用 join 函数连接字符
gfg = "".join(reversed(gfg))

print(gfg)

输出:

wxhkj

从字符串中删除/更新

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

更新字符

在 Python 中,可以通过首先将字符串转换为Python 列表,然后更新列表中的元素来更新字符串的字符。由于列表本质上是可变的,因此我们可以更新字符,然后将列表转换回字符串。

另一种方法是使用字符串切片方法。对要更新的字符之前的字符串进行切片,然后添加新字符,最后通过字符串切片再次添加字符串的其他部分。

例子:

在此示例中,我们使用列表和字符串切片方法来更新字符。我们将 String1 转换为列表,更改其特定元素的值,然后使用 Python string join()方法将其转换回字符串。

在字符串切片方法中,我们将字符串切片到要更新的字符,连接新字符,最后连接字符串的剩余部分。

# 更新字符串中的字符
String1 = "Hello, I'm a Geek"
print("初始字符串:")
print(String1)

# 方法1: 将字符串转换为列表,更新列表中的元素,然后将其转换回字符串
list1 = list(String1)
list1[2] = 'p'
String2 = ''.join(list1)
print("\n在索引2处更新字符:")
print(String2)

# 方法2: 切片操作将新字符插入到原始字符串中
String3 = String1[0:2] + 'p' + String1[3:]
print(String3)

输出:

初始字符串:
Hello, I'm a Geek

在索引2处更新字符:
Helpo, I'm a Geek

Helpo, I'm a Geek

更新整个字符串

由于 Python 字符串本质上是不可变的,因此我们无法更新现有字符串。我们只能为同名变量赋予一个全新的值。

例子:

在此示例中,我们首先为“String1”分配一个值,然后通过为其分配一个完全不同的值来更新它。我们只是改变了它的参考。

# 更新整个字符串
String1 = "Hello, I'm a Geek"
print("初始字符串:")
print(String1)

# 更新字符串
String1 = "Welcome to the Geek World"
print("\n更新后的字符串:")
print(String1)

输出:

初始字符串:
Hello, I'm a Geek

更新后的字符串:
Welcome to the Geek World

删除一个字符

Python 字符串是不可变的,这意味着我们无法从中删除字符。当我们尝试使用del关键字删除字符时,会产生错误。

# 删除字符串中的字符
String1 = "Hello, I'm a Geek"
print("初始字符串:")
print(String1)

# 删除索引为2的字符
index_to_delete = 2
String1 = String1[:index_to_delete] + String1[index_to_delete+1:]
print("\n删除索引为2的字符后的字符串:")
print(String1)

输出:

初始字符串:
Hello, I'm a Geek

删除索引为2的字符后的字符串:
Helo, I'm a Geek

删除整个字符串

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

# 删除整个字符串
String1 = "Hello, I'm a Geek"
print("初始字符串:")
print(String1)

# 使用 del 删除整个字符串
del String1
print("\n删除整个字符串:")
print(String1)

输出:

初始字符串:
Hello, I'm a Geek

删除整个字符串:

Traceback (most recent call last):
  File "your_program.py", line 8, in <module>
    print(String1)
NameError: name 'String1' is not defined

Python 中的转义序列

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

转义序列以反斜杠开头,可以有不同的解释。如果使用单引号来表示字符串,则必须对字符串中存在的所有单引号进行转义,对于双引号也是如此。 

# 使用转义序列处理字符串中的特殊字符
String1 = '''I'm a "Geek"'''
print("使用三引号的初始字符串:")
print(String1)

# 转义单引号
String1 = 'I\'m a "Geek"'
print("\n转义单引号: ")
print(String1)

# 转义双引号
String1 = "I'm a \"Geek\""
print("\n转义双引号: ")
print(String1)

# 使用转义序列打印路径中的反斜杠
String1 = "C:\\Python\\Geeks\\"
print("\n转义反斜杠: ")
print(String1)

# 使用制表符打印路径
String1 = "Hi\tGeeks"
print("\n制表符: ")
print(String1)

# 使用换行符打印文本
String1 = "Python\nGeeks"
print("\n换行符: ")
print(String1)

输出:

使用三引号的初始字符串:
I'm a "Geek"

转义单引号: 
I'm a "Geek"

转义双引号: 
I'm a "Geek"

转义反斜杠: 
C:\Python\Geeks\

制表符: 
Hi	Geeks

换行符: 
Python
Geeks

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

字符串的格式化

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

示例1:

在此示例中,我们将声明一个包含大括号 {} 的字符串,该大括号充当占位符,并向它们提供值以了解字符串声明位置的重要性。

# 字符串格式化

# 默认顺序
String1 = "{} {} {}".format('Geeks', 'For', 'Life')
print("默认顺序打印字符串:")
print(String1)

# 位置顺序格式化
String1 = "{1} {0} {2}".format('Geeks', 'For', 'Life')
print("\n位置顺序打印字符串:")
print(String1)

# 关键字顺序格式化
String1 = "{l} {f} {g}".format(g='Geeks', f='For', l='Life')
print("\n按关键字顺序打印字符串:")
print(String1)

输出:

默认顺序打印字符串:
Geeks For Life

位置顺序打印字符串:
For Geeks Life

按关键字顺序打印字符串:
Life For Geeks

示例2:

可以使用format()对二进制、十六进制等整数和浮点数进行舍入或以指数形式显示。

# 格式化整数

# 将整数16格式化为二进制表示
String1 = "{0:b}".format(16)
print("16的二进制表示是:")
print(String1)

# 格式化浮点数

# 使用指数表示法格式化浮点数165.6458
String1 = "{0:e}".format(165.6458)
print("\n165.6458的指数表示法是:")
print(String1)

# 四舍五入整数

# 将1/6格式化为两位小数
String1 = "{0:.2f}".format(1/6)
print("\n六分之一是:")
print(String1)

输出:

16的二进制表示是:
10000

165.6458的指数表示法是:
1.656458e+02

六分之一是:
0.17

Python 字符串常量

  • string.ascii_letters: 包含小写字母和大写字母的字符串。
  • string.ascii_lowercase: 包含小写字母的字符串。
  • string.ascii_uppercase: 包含大写字母的字符串。
  • string.digits: 包含数字的字符串。
  • string.hexdigits: 包含十六进制数字的字符串。
  • string.letters: 小写字母和大写字母的字符串的拼接。
  • string.lowercase: 必须包含小写字母的字符串。
  • string.octdigits: 包含八进制数字的字符串。
  • string.punctuation: 包含ASCII标点符号的字符串。
  • string.printable: 包含可打印字符的字符串。
  • str.endswith(suffix): 如果字符串以给定的后缀结尾,则返回True,否则返回False。
  • str.startswith(prefix): 如果字符串以给定的前缀开头,则返回True,否则返回False。
  • str.isdigit(): 如果字符串中的所有字符都是数字,则返回True,否则返回False。
  • str.isalpha(): 如果字符串中的所有字符都是字母,则返回True,否则返回False。
  • string.isdecimal(): 如果字符串中的所有字符都是十进制数字,则返回True。
  • str.format(): 字符串格式化方法之一,允许多次替换和值格式化。
  • str.index(substring): 返回子字符串在字符串中第一次出现的位置。
  • string.uppercase: 必须包含大写字母的字符串。
  • string.whitespace: 包含所有被视为空格的字符的字符串。
  • str.swapcase(): 将字符串中的所有大写字符转换为小写,反之亦然,并返回结果字符串。
  • str.replace(old, new): 返回一个字符串的副本,其中所有旧子字符串都被新子字符串替换。

已弃用的字符串函数

  1. str.isdecimal(): 如果字符串中的所有字符都是十进制数字,则返回True。
  2. str.isalnum(): 如果字符串中的所有字符都是字母数字字符,则返回True。
  3. str.istitle(): 如果字符串是以标题大小写的形式编写的,则返回True。
  4. str.partition(separator): 将字符串在第一次出现的分隔符处分割,并返回一个包含三个部分的元组。
  5. str.isidentifier(): 检查字符串是否是有效的标识符。
  6. len(str): 返回字符串的长度。
  7. str.rindex(substring): 返回子字符串在字符串中最后一次出现的位置。
  8. max(str): 返回字符串中最大的字母字符。
  9. min(str): 返回字符串中最小的字母字符。
  10. str.splitlines(): 返回字符串中的行列表。
  11. str.capitalize(): 返回首字母大写的字符串。
  12. str.expandtabs(): 将字符串中的制表符扩展为一个或多个空格。
  13. str.find(substring): 返回子字符串在字符串中第一次出现的索引。
  14. str.rfind(substring): 返回子字符串在字符串中最后一次出现的索引。
  15. str.count(sub): 返回子字符串在字符串中出现的次数。
  16. str.lower(): 返回字符串的小写版本。
  17. str.split([sep]): 返回字符串的单词列表,可选地使用分隔符 sep 进行分割。
  18. str.rsplit(): 从字符串的末尾开始扫描,返回单词列表。
  19. str.rpartition(separator): 将字符串在最后一次出现的分隔符处分割,并返回一个包含三个部分的元组。
  20. str.join(iterable): 使用分隔符将可迭代对象中的元素连接成一个字符串。
  21. str.strip(): 返回去除了前导和尾随空格的字符串的副本。
  22. str.lstrip(): 返回去除了前导空格的字符串的副本。
  23. str.rstrip(): 返回去除了尾随空格的字符串的副本。
  24. str.swapcase(): 将字符串中的大写字母转换为小写,反之亦然。
  25. str.translate(table): 使用给定的转换表进行字符转换。
  26. str.upper(): 返回字符串的大写版本。
  27. str.ljust(width): 将字符串左对齐,填充指定宽度的空格。
  28. str.rjust(width): 将字符串右对齐,填充指定宽度的空格。
  29. str.center(width): 将字符串居中对齐,填充指定宽度的空格。
  30. str.zfill(width): 在数字字符串的左侧填充零,直到达到指定的宽度。
  31. str.replace(old, new): 返回替换了所有旧子字符串的新子字符串的副本。
  32. str.casefold(): 返回可以用于不区分大小写比较的字符串的小写版本。
  33. str.encode(encoding): 将字符串编码为指定编码的字节序列,默认编码为utf-8。
  34. str.maketrans(x, y, z): 返回用于 str.translate() 的转换表。

Python中字符串的优点:

  • 字符串的使用规模更大,即用于更广泛的操作领域,例如存储和操作文本数据、表示名称、地址以及可以表示为文本的其他类型的数据。
  • Python 拥有一组丰富的字符串方法,允许您以多种方式操作和使用字符串。这些方法可以轻松执行常见任务,例如将字符串转换为大写或小写、替换子字符串以及将字符串拆分为列表。
  • 字符串是不可变的,这意味着一旦创建了字符串,就无法更改它。这在某些情况下可能很有用,因为这意味着您可以确信字符串的值不会意外更改。
  • Python 内置了对字符串的支持,这意味着您无需导入任何其他库或模块即可使用字符串。这使得字符串的入门变得容易,并降低了代码的复杂性。
  • Python 具有用于创建和操作字符串的简洁语法,这使得编写和读取使用字符串的代码变得很容易。

Python 中字符串的缺点:

  • 当我们处理大量文本数据时,字符串可能效率低下。例如,如果需要对字符串执行大量操作,例如替换子字符串或将字符串拆分为多个子字符串,则速度可能会很慢并且会消耗大量资源。
  • 当您需要表示复杂的数据结构(例如列表或字典)时,字符串可能很难使用。在这些情况下,使用不同的数据类型(例如列表或字典)来表示数据可能会更有效。