Python String详解!

嗨,你好啊,我是猿java

字符串是 Python编程中的一种数据结构,表示一系列字符。它是一种不可变的数据类型,这意味着一旦创建了字符串,就不能更改它。Python字符串广泛用于许多不同的应用程序中,如存储和操作文本数据,表示姓名、地址和其他可以表示为文本的数据类型。

本文大纲

  • Python字符串是什么?
  • Python如何创建字符串?
  • 访问Python字符串中的字符
  • Python字符串切片
  • Python字符串反转
  • 删除/更新字符串
  • Python中的转义序列
  • Python字符串格式化
  • 有用的Python字符串操作
  • Python字符串常量

Python字符串是什么?

Python编程没有字符数据类型,单个字符只是长度为1的字符串,下面示例是 Python字符串的语法:

Python字符串数据类型的语法

1
string_variable = 'Hello, world!'

Python字符串数据类型的示例

1
2
3
string_0 = "A Computer Science portal for Ptthon"
print(string_0)
print(type(string_0))

输出:

1
2
A Computer Science portal for Ptthon
<class 'str'>

Python如何创建字符串

在Python中,可以使用单引号(’ ‘)、双引号(” “)或三重引号(””” “””)来创建字符串。

下面我们通过几个示例来让展示 在Python中是如何定义字符串或如何编写字符串。

在这个示例中,我们将演示创建 Python字符串的不同方式。我们将使用单引号、双引号和三重双引号来创建字符串。三重引号可以用于声明 Python中的多行字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 使用单引号创建字符串
String1 = 'Welcome to the Python World'
print("使用单引号创建的字符串: ")
print(String1)

# 使用双引号创建字符串
String1 = "I'm a Python"
print("\n使用双引号创建的字符串: ")
print(String1)

# 使用三重引号创建字符串
String1 = '''I'm a Python and I live in a world of "Python"'''
print("\n使用三重引号创建的字符串: ")
print(String1)

# 使用三重引号创建多行字符串
String1 = '''Python
For
Life'''
print("\n创建多行字符串: ")
print(String1)

输出:

1
2
3
4
5
6
7
8
9
10
使用单引号创建的字符串: 
Welcome to the Python World
使用双引号创建的字符串:
I'm a Python
使用三重引号创建的字符串:
I'm a Python and I live in a world of "Python"
创建多行字符串:
Python
For
Life

访问Python字符串中的字符

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

访问超出范围的索引将导致 IndexError。只有整数可以作为索引传递,浮点数或其他类型将导致 TypeError。

Python字符串索引

Python字符串正索引

在这个示例中,我们将在Python编程中定义一个字符串,并使用正索引访问其字符。第0个元素将是字符串的第一个字符。

1
2
3
4
5
String1 = "Hello"
print("初始字符串: ", String1)

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

输出:

1
2
初始字符串:  Hello
字符串的第一个字符是: H

Python字符串负索引

在这个示例中,我们将使用负索引访问其字符。-3元素是字符串的倒数第三个字符。

1
2
3
4
5
String1 = "Hello"
print("初始字符串: ", String1)

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

输出:

1
2
初始字符串:  Hello
字符串的最后一个字符是: e

Python字符串切片

在Python编程教程中,字符串切片方法用于访问字符串中的一系列字符。字符串切片使用切片操作符,即冒号(:)。使用此方法时要记住的一点是,切片后返回的字符串包含起始索引处的字符,但不包含结束索引处的字符。

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

1
2
3
4
5
6
7
8
9
10
11
12
# 创建一个字符串
String1 = "Hello,Python"
print("初始字符串: ")
print(String1)

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

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

输出:

1
2
3
4
5
6
初始字符串: 
Hello
从第3到第12个字符的切片:
lo,
从第3到倒数第2个字符之间的切片:
lo,Pytho

Python字符串反转

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

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

1
2
3
# 反转字符串的程序
gfg = "hello"
print(gfg[::-1])

输出:

1
olleh

使用内置的反转函数

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

1
2
3
4
5
6
7
# 反转字符串的程序
gfg = "hello"

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

print(gfg)

输出:

1
olleh

删除/更新字符串

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

更新字符

可以通过首先将字符串转换为Python列表,然后更新列表中的元素来更新Python中的字符。由于列表是可变的,我们可以更新字符,然后使用Python字符串join()方法将列表转换回字符串。

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

示例:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Python程序更新字符串字符
String1 = "Hello, I'm a Python"
print("初始字符串: ")
print(String1)

# 更新字符串的字符
## 由于Python字符串是不可变的,它们不直接支持项目更新
### 有以下两种方法
#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)

输出:

1
2
3
4
5
初始字符串: 
Hello, I'm a Python
更新第2个索引处的字符:
Hello, I'm a Python
Hello, I'm a Python

更新整个字符串

在Python编程中,由于Python字符串的不可变性,我们无法更新现有字符串。我们只能将一个完全新值分配给具有相同名称的变量。

示例:

在这个示例中,我们首先为‘String1’分配一个值,然后通过分配一个完全不同的值来更新它。我们只是改变了它的引用。

1
2
3
4
5
6
7
8
9
# Python程序更新整个字符串
String1 = "Hello, I'm a Python"
print("初始字符串: ")
print(String1)

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

输出:

1
2
3
4
初始字符串: 
Hello, I'm a Python
更新后的字符串:
Welcome to the Python World

删除字符

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

1
2
3
4
5
6
7
8
# Python程序删除字符串字符
String1 = "Hello, I'm a Python"
print("初始字符串: ")
print(String1)

print("删除第2个索引处的字符: ")
del String1[2]
print(String1)

输出:

1
2
3
4
5
6
7
初始字符串: 
Hello, I'm a Python
删除第2个索引处的字符:
Traceback (most recent call last):
File "e:\GFG\Python codes\Codes\demo.py", line 9, in <module>
del String1[2]
TypeError: 'str' object doesn't support item deletion

但使用切片,我们可以从原始字符串中删除字符并将结果存储在新字符串中。

示例:

在这个示例中,我们首先将字符串切片到要删除的字符,然后连接从删除字符开始的剩余字符串。

1
2
3
4
5
6
7
8
9
# Python程序删除字符串中的字符
String1 = "Hello, I'm a Python"
print("初始字符串: ")
print(String1)

# 删除字符串中的字符
String2 = String1[0:2] + String1[3:]
print("\n删除第2个索引处的字符: ")
print(String2)

输出:

1
2
3
4
初始字符串: 
Hello, I'm a Python
删除第2个索引处的字符:
Helo, I'm a Python

删除整个字符串

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

1
2
3
4
5
6
7
8
9
# Python程序删除整个字符串
String1 = "Hello, I'm a Python"
print("初始字符串: ")
print(String1)

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

错误:

1
2
3
4
Traceback (most recent call last): 
File "/home/e4b8f2170f140da99d2fe57d9d8c6a94.py", line 12, in
print(String1)
NameError: name 'String1' is not defined

Python中的转义序列

在打印包含单引号和双引号的字符串时会导致SyntaxError,因为字符串已经包含单引号和双引号,因此无法使用其中任何一个来打印。因此,要打印这样的字符串,可以使用三重引号或转义序列来打印字符串。

转义序列以反斜杠开头,可以被不同地解释。如果使用单引号表示字符串,则字符串中出现的所有单引号必须转义,双引号也是如此。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 初始字符串
String1 = '''I'm a "Python"'''
print("使用三重引号的初始字符串: ")
print(String1)

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

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

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

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

# 使用换行符打印路径
String1 = "Python\nPython"
print("\n换行符: ")
print(String1)

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
使用三重引号的初始字符串: 
I'm a "Python"
转义单引号:
I'm a "Python"
转义双引号:
I'm a "Python"
转义反斜杠:
C:\Python\World\
制表符:
Hi Python
换行符:
Python
World

示例:

要忽略字符串中的转义序列,可以使用r或R,这表示字符串是原始字符串,内部的转义序列将被忽略。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 使用转义序列打印八进制的hello
String1 = "\110\145\154\154\157"
print("\n使用转义序列打印八进制格式: ")
print(String1)

# 使用原始字符串忽略转义序列
String1 = r"This is \110\145\154\154\157"
print("\n使用八进制格式打印原始字符串: ")
print(String1)

# 使用转义序列打印十六进制的Ptthon
String1 = "This is \x47\x65\x65\x6b\x73 in \x48\x45\x58"
print("\n使用转义序列打印十六进制格式: ")
print(String1)

# 使用原始字符串忽略转义序列
String1 = r"This is \x47\x65\x65\x6b\x73 in \x48\x45\x58"
print("\n使用十六进制格式打印原始字符串: ")
print(String1)

输出:

1
2
3
4
5
6
7
8
使用转义序列打印八进制格式: 
Hello
使用八进制格式打印原始字符串:
This is \110\145\154\154\157
使用转义序列打印十六进制格式:
This is Ptthon in HEX
使用十六进制格式打印原始字符串:
This is \x47\x65\x65\x6b\x73 in \x48\x45\x58

Python字符串格式化

在Python中,字符串数据类型可以使用format()方法进行格式化,这是一种非常灵活和强大的字符串格式化工具。字符串中的format方法包含大括号{}作为占位符,可以根据位置或关键字指定顺序来保存参数。

示例1:

在这个示例中,我们将声明一个包含大括号{}作为占位符的字符串,并为它们提供值以查看字符串声明位置的重要性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Python程序格式化字符串

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

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

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

输出:

1
2
3
4
5
6
默认顺序打印字符串: 
Python For Life
位置顺序打印字符串:
For Python Life
关键字顺序打印字符串:
Life For Python

示例2:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 整数格式化
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)

输出:

1
2
3
4
5
6
16的二进制表示: 
10000
165.6458的指数表示:
1.656458e+02
六分之一:
0.17

示例3:

在Python字符串数据类型中,可以使用格式说明符将字符串左对齐、右对齐或居中对齐,用冒号(:)分隔。(<)表示字符串应在10个字符的字段宽度内左对齐,(>)表示右对齐,(^)表示居中对齐。我们也可以指定对齐的长度。例如,(<10)表示字符串应在10个字符的字段宽度内左对齐。

1
2
3
4
# 字符串对齐
String1 = "|{:<10}|{:^10}|{:>10}|".format('Grammer', 'for', 'Python')
print("\n使用格式化的左对齐、居中对齐和右对齐: ")
print(String1)

输出:

1
2
使用格式化的左对齐、居中对齐和右对齐: 
|Grammer | for | Python|

示例4:

旧样式格式化是在不使用format方法的情况下,通过%操作符完成的。

1
2
3
4
5
# Python程序旧样式格式化整数
Integer1 = 12.3456789
print("3.2f格式化: ")
print('Integer1的值是 %3.2f' % Integer1)
print("\n3.

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 可打印字符的字符串。
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() 返回一个字符串的副本,其中所有子字符串的出现都被替换为另一个子字符串。

总结

本文,我们对 Python String进行了详细的分析,它是一种不可变的数据类型,用于存储和操作文本数据。支持创建、索引、切片、格式化等多种操作,常用于处理文本信息。

学习交流

如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注公众号:猿java,持续输出硬核文章。

drawing