字符串是 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
要忽略字符串中的转义序列,请使用r或R ,这意味着该字符串是原始字符串,并且将忽略其中的转义序列。
字符串的格式化
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)
: 返回一个字符串的副本,其中所有旧子字符串都被新子字符串替换。
已弃用的字符串函数
str.isdecimal()
: 如果字符串中的所有字符都是十进制数字,则返回True。str.isalnum()
: 如果字符串中的所有字符都是字母数字字符,则返回True。str.istitle()
: 如果字符串是以标题大小写的形式编写的,则返回True。str.partition(separator)
: 将字符串在第一次出现的分隔符处分割,并返回一个包含三个部分的元组。str.isidentifier()
: 检查字符串是否是有效的标识符。len(str)
: 返回字符串的长度。str.rindex(substring)
: 返回子字符串在字符串中最后一次出现的位置。max(str)
: 返回字符串中最大的字母字符。min(str)
: 返回字符串中最小的字母字符。str.splitlines()
: 返回字符串中的行列表。str.capitalize()
: 返回首字母大写的字符串。str.expandtabs()
: 将字符串中的制表符扩展为一个或多个空格。str.find(substring)
: 返回子字符串在字符串中第一次出现的索引。str.rfind(substring)
: 返回子字符串在字符串中最后一次出现的索引。str.count(sub)
: 返回子字符串在字符串中出现的次数。str.lower()
: 返回字符串的小写版本。str.split([sep])
: 返回字符串的单词列表,可选地使用分隔符sep
进行分割。str.rsplit()
: 从字符串的末尾开始扫描,返回单词列表。str.rpartition(separator)
: 将字符串在最后一次出现的分隔符处分割,并返回一个包含三个部分的元组。str.join(iterable)
: 使用分隔符将可迭代对象中的元素连接成一个字符串。str.strip()
: 返回去除了前导和尾随空格的字符串的副本。str.lstrip()
: 返回去除了前导空格的字符串的副本。str.rstrip()
: 返回去除了尾随空格的字符串的副本。str.swapcase()
: 将字符串中的大写字母转换为小写,反之亦然。str.translate(table)
: 使用给定的转换表进行字符转换。str.upper()
: 返回字符串的大写版本。str.ljust(width)
: 将字符串左对齐,填充指定宽度的空格。str.rjust(width)
: 将字符串右对齐,填充指定宽度的空格。str.center(width)
: 将字符串居中对齐,填充指定宽度的空格。str.zfill(width)
: 在数字字符串的左侧填充零,直到达到指定的宽度。str.replace(old, new)
: 返回替换了所有旧子字符串的新子字符串的副本。str.casefold()
: 返回可以用于不区分大小写比较的字符串的小写版本。str.encode(encoding)
: 将字符串编码为指定编码的字节序列,默认编码为utf-8。str.maketrans(x, y, z)
: 返回用于str.translate()
的转换表。
Python中字符串的优点:
- 字符串的使用规模更大,即用于更广泛的操作领域,例如存储和操作文本数据、表示名称、地址以及可以表示为文本的其他类型的数据。
- Python 拥有一组丰富的字符串方法,允许您以多种方式操作和使用字符串。这些方法可以轻松执行常见任务,例如将字符串转换为大写或小写、替换子字符串以及将字符串拆分为列表。
- 字符串是不可变的,这意味着一旦创建了字符串,就无法更改它。这在某些情况下可能很有用,因为这意味着您可以确信字符串的值不会意外更改。
- Python 内置了对字符串的支持,这意味着您无需导入任何其他库或模块即可使用字符串。这使得字符串的入门变得容易,并降低了代码的复杂性。
- Python 具有用于创建和操作字符串的简洁语法,这使得编写和读取使用字符串的代码变得很容易。
Python 中字符串的缺点:
- 当我们处理大量文本数据时,字符串可能效率低下。例如,如果需要对字符串执行大量操作,例如替换子字符串或将字符串拆分为多个子字符串,则速度可能会很慢并且会消耗大量资源。
- 当您需要表示复杂的数据结构(例如列表或字典)时,字符串可能很难使用。在这些情况下,使用不同的数据类型(例如列表或字典)来表示数据可能会更有效。