五、字符串与转义字符
5.1字符串概念
Python字符串是一系列字符的有序序列,可以用单引号、双引号或三引号括起来表示,是Python中常用的数据类型之一。
# 把多个字符放置在单引号、双引号或者三引号中间
s1 = """你好"""
s2 = "你好"
s3 = '你好'
# python中可以利用type()函数查看数据的类型
print(type(s1))
print(type(s2))
print(type(s3))
5.2字符串的字符序号
正序 | 0 | 1 | 2 |
---|---|---|---|
字符串 | 你 | 好 | 吗 |
倒序 | -3 | -2 | -1 |
5.3字符串的截取
5.3.1 字符串截取的语法
Python字符串的截取可以通过使用切片语法 string[start:stop:step]
实现
start
是起始索引stop
是结束索引(不包括)step
是步长。
5.3.2 字符串截取基本种类
设变量s=‘今天的课程是Python字符串’
- 基本切片:
string[start:stop],string[start:],string[:stop]
s[0:4] # 今天的课
s[4:] # 程是Python字符串
s[:6] # 今天的课程是
- 带步长的切片:
string[start:stop:step]
s[0:8:2] # 今的程P
- 负索引切片:
string[-start:-stop]
s[-4:-1] # n字符
- 完整字符串复制:
string[:]
s[:] # 今天的课程是Python字符串
###5.4 字符串变量
5.4.1 字符串变量的本质
字符串变量是指存储字符串值的变量。在Python中,你可以使用变量来存储字符串,然后对其进行操作、传递给函数等。 当你使用变量时,你实际上是在内存中创建了一个存储特定值的位置,并为该位置分配了一个名称。Python中的变量是动态的,因此你可以在程序执行过程中更改变量所引用的值。
下面是一个简单的例子,演示了如何创建一个字符串变量并随后更改它的值:
# 创建一个字符串变量
my_string = "Hello"
# 打印初始的字符串变量的值
print(my_string) # 输出: Hello
# 将字符串变量的值更改为另一个字符串
my_string = "World"
# 打印更改后的字符串变量的值
print(my_string) # 输出: World
在这个示例中,我们首先创建了一个名为 my_string
的字符串变量,并将字符串 "Hello"
赋给它。然后,我们将该变量的值更改为字符串 "World"
。这是因为Python中的变量是动态的,可以根据需要引用不同的值。
来个图示更加容易理解
5.4.2 查看字符串变量的地址id(object)
在Python中,id()
函数用于返回对象的标识值,这个标识值是该对象在内存中的地址。每个对象在内存中都有一个唯一的标识值,可以通过 id()
函数获取。
id()
函数的基本语法是:
id(object)
其中 object
是要获取标识值的对象。
下面是一个简单的示例,演示了如何使用 id()
函数:
my_string = "Hello"
print(id(my_string)) # 输出一个整数值,表示字符串对象 "Hello" 的内存地址
my_list = [1, 2, 3]
print(id(my_list)) # 输出一个整数值,表示列表对象 [1, 2, 3] 的内存地址
id()
函数对于调试和理解Python中对象的生命周期和内存管理很有用。但需要注意的是,同一对象在不同的时间或不同的Python解释器中,其标识值可能会不同。
5.5 字符串比大小
在Python中,字符串的比较基于字符的Unicode码点值,按照字典顺序进行。可以使用比较运算符(<
, <=
, >
, >=
, ==
, !=
)来比较字符串。下面是一些例子:
5.5.1. 按字母顺序比较:
print("apple" < "banana") # 输出: True
print("apple" > "banana") # 输出: False
5.5.2. 比较字符串长度(如果前面的字符相同):
print("apple" < "applepie") # 输出: True
print("apple" > "app") # 输出: True
5.5.3. 大小写敏感比较(大写字母的Unicode值小于小写字母):
print("Apple" < "apple") # 输出: True
print("Apple" == "apple") # 输出: False
5.5.4. 混合字符比较(按字符的Unicode值逐个比较):
print("a1" < "a2") # 输出: True
print("a10" < "a2") # 输出: True
这些比较方式适用于Python中的字符串比较,确保按字典顺序对字符串进行排序和比较。
5.6 字符串操作符
在Python中,有一些常见的字符串操作符,它们允许你执行各种操作,例如拼接、重复、成员检查等。下面是一些常见的字符串操作符:
5.6.1 加法操作符 +
:
- 用于拼接字符串。
str1 = "Hello"
str2 = "World"
result = str1 + str2
print(result) # 输出: HelloWorld
5.6.2. 乘法操作符 *
:
- 用于重复字符串。
str1 = "Hello"
result = str1 * 3
print(result) # 输出: HelloHelloHello
5.6.3. 成员操作符 in
和 not in
:
- 用于检查字符串是否包含某个子串。
my_string = "hello"
print("h" in my_string) # 输出: True
print("world" not in my_string) # 输出: True
5.6.4. 索引操作符 []
:
- 用于访问字符串中的单个字符或子串。
my_string = "hello"
print(my_string[0]) # 输出: h
print(my_string[-1]) # 输出: o
print(my_string[1:4]) # 输出: ell
5.6.5. 切片操作符 [:]
:
- 用于获取字符串的子串。
my_string = "hello"
print(my_string[:3]) # 输出: hel
print(my_string[2:]) # 输出: llo
这些操作符可以帮助你执行各种字符串操作,包括拼接、重复、检查成员、索引和切片等。
5.7 字符串修改与替换
在Python中,字符串是不可变(immutable)的数据类型,这意味着你不能直接修改字符串的内容。每次对字符串执行操作时,都会生成一个新的字符串对象,而原始字符串保持不变。 因此,如果你想修改字符串,通常的做法是创建一个新的字符串,其中包含所需的修改。这可以通过字符串的各种方法来实现,比如 replace()、split()、join() 等。
5.7.1 Replace()函数替换
在Python中,你可以使用 replace()
方法来进行字符串的替换。replace()
方法接受两个参数:要替换的子字符串和替换后的字符串。它返回一个新的字符串,其中所有出现的子字符串都被替换为指定的替换字符串。
replace()
是Python字符串对象的一个方法,用于替换字符串中的子串。它的基本语法是:
new_string = old_string.replace(old, new[, count])
其中:
old_string
是要进行替换操作的原始字符串。old
是要被替换的子串。new
是用来替换的新子串。count
是可选参数,指定替换的次数。如果指定了count
,则只替换前count
次出现的子串。如果不指定count
,则所有匹配的子串都会被替换。
replace()
方法会返回一个新的字符串,其中所有出现的 old
子串都被替换为 new
子串。
下面是一个简单的示例:
original_string = "Hello, World!World!World!"
new_string = original_string.replace("World", "Python")
print(new_string) # 输出: Hello, Python!
在这个示例中,原始字符串 "Hello, World!"
中的 "World"
被替换为 "Python"
,生成了新的字符串 "Hello, Python!"
。原始字符串 original_string
并没有改变,而是生成了一个新的字符串 new_string
。
5.7.2 旧式的字符串格式化替换
在Python中,你可以使用 %
符号来进行字符串格式化。这种方法被称为 "旧式的字符串格式化",它使用 %
运算符将格式化字符串和要插入其中的值结合起来。
基本的语法是:format_string % values
format_string
是包含格式化占位符的字符串,如%s
、%d
、%f
等。values
是要插入到格式化字符串中的值,可以是单个值或一个元组。
下面是一个简单的示例,演示了如何使用 %
运算符进行字符串替换:
name = "Alice"
age = 30
height = 5.8
# 使用 %s、%d、%f 等占位符进行字符串格式化
formatted_string = "Name: %s, Age: %d, Height: %.1f" % (name, age, height)
print(formatted_string)
在这个示例中,%s
、%d
、%.1f
是格式化占位符,它们分别代表字符串、整数和带有一位小数的浮点数。这些占位符会被后面的值替换,而 %
运算符左边的字符串就是格式化字符串。
虽然 %
格式化字符串在Python中仍然有效,但通常推荐使用更现代的方法,如 str.format()
方法或 f-strings(在Python 3.6及以上版本可用)。这些方法更直观、灵活,并且提供了更多的功能。
5.7.3 format()函数替换
在Python中,format()
方法提供了一种更灵活和现代的方式来进行字符串格式化。它允许你在字符串中使用占位符,并使用 format()
方法将这些占位符替换为实际的值。
基本的语法是:
formatted_string = "format_string".format(arguments)
其中 format_string
是包含格式化占位符 {}
的字符串,arguments
是要插入到格式化字符串中的值。
下面是一个简单的示例,演示了如何使用 format()
方法进行字符串替换:
name = "Alice"
age = 30
height = 5.8
# 使用 format() 方法进行字符串格式化 按顺序
formatted_string = "Name: {}, Age: {}, Height: {}".format(name, age, height)
print(formatted_string)
在这个示例中,大括号 {}
是格式化占位符,它们将被 format()
方法的参数替换。format()
方法可以接受任意数量的参数,并按顺序将它们替换到格式化字符串中。你还可以使用具名参数来更清晰地指定要替换的值。
# 使用具名参数
formatted_string = "Name: {name}, Age: {age}, Height: {height}".format(name=name, age=age, height=height)
print(formatted_string)
# 按指定序号
formatted_string = "Name: {0}, Age: {1}, Height: {2}".format(name, age, height)
print(formatted_string)
使用 format()
方法进行字符串替换比使用 %
运算符更灵活和更易读,因此通常被推荐作为首选的字符串格式化方法。
5.7.4 f-strings替换
f-strings 是 Python 3.6 及更高版本引入的一种字符串格式化方法,它提供了一种简洁、直观的方式来在字符串中插入变量的值。
在 f-strings 中,你可以在字符串前面加上 f
或 F
前缀,然后在字符串中使用花括号 {}
将变量名放入其中。在字符串中的这些花括号内的表达式将会被计算,并用计算结果替换它们。
下面是一个示例:
name = "Alice"
age = 30
formatted_string = f"Name: {name}, Age: {age}"
print(formatted_string)
在这个示例中,f
前缀指示这是一个 f-string。在字符串中的花括号 {}
内,可以放置变量名或任何表达式,它们将被计算,并用计算结果替换。
f-strings 是一种强大而直观的字符串格式化方法,它使得代码更易读、更易维护。相对于以前的格式化方法(如 format()
方法和 %
格式化字符串),f-strings 更简洁,而且通常更快。
5.8 字符串常见函数
字符串在Python中有很多常用的函数和方法,这些函数和方法可以帮助你处理和操作字符串。以下是一些常用的字符串函数和方法:
5.8.1. len():
返回字符串的长度(字符数)。
my_string = "Hello"
print(len(my_string)) # 输出: 5
5.8.2. upper() 和 lower():
将字符串转换为大写或小写。
my_string = "Hello"
print(my_string.upper()) # 输出: HELLO
print(my_string.lower()) # 输出: hello
5.8.3. capitalize() 和 title():
将字符串的第一个字符大写或每个单词的第一个字符大写。
my_string = "hello world"
print(my_string.capitalize()) # 输出: Hello world
print(my_string.title()) # 输出: Hello World
5.8.4. count(substring):
返回字符串中子串出现的次数。
my_string = "hello world"
print(my_string.count("l")) # 输出: 3
5.8.5. find(substring) 和 index(substring):
返回子串在字符串中第一次出现的位置。
my_string = "hello world"
print(my_string.find("world")) # 输出: 6
print(my_string.index("world")) # 输出: 6
5.8.6. replace(old, new):
将字符串中的指定子串替换为新的子串。
my_string = "hello world"
new_string = my_string.replace("world", "Python")
print(new_string) # 输出: hello Python
5.8.7. split(separator):
将字符串分割成子串列表,分割符为指定的分隔符。
my_string = "hello world"
words = my_string.split(" ")
print(words) # 输出: ['hello', 'world']
5.8.8. join(iterable):
将字符串列表中的每个字符串连接起来,用指定的分隔符隔开。
words = ['hello', 'world']
my_string = " ".join(words)
print(my_string) # 输出: hello world
在Python中,有一些函数可以用于判断字符串的特性,例如是否全部由数字组成、是否全部由字母组成等。以下是一些常用的字符串判断相关函数:
5.8.9. isalpha():
如果字符串中的所有字符都是字母,则返回 True;否则返回 False。
my_string = "Hello"
print(my_string.isalpha()) # 输出: True
5.8.10. isdigit():
如果字符串中的所有字符都是数字,则返回 True;否则返回 False。
my_string = "12345"
print(my_string.isdigit()) # 输出: True
5.8.11. isalnum():
如果字符串中的所有字符都是字母或数字,则返回 True;否则返回 False。
my_string = "Hello123"
print(my_string.isalnum()) # 输出: True
5.8.12. islower() 和 isupper():
分别判断字符串中的所有字符是否都是小写或大写。
my_string = "hello"
print(my_string.islower()) # 输出: True
my_string = "HELLO"
print(my_string.isupper()) # 输出: True
5.8.13. isspace():
如果字符串中的所有字符都是空格,则返回 True;否则返回 False。
my_string = " "
print(my_string.isspace()) # 输出: True
5.8.14. startswith(prefix) 和 endswith(suffix):
判断字符串是否以指定的前缀或后缀开头或结尾。
my_string = "hello world"
print(my_string.startswith("hello")) # 输出: True
print(my_string.endswith("world")) # 输出: True
这些是Python中字符串常用的一些函数和方法,它们可以帮助你对字符串进行各种操作,包括大小写转换、查找子串、替换子串、分割字符串、字符串的特性,从而执行相应的逻辑操作等。
5.9 字符串常见应用top
5.9.1. 字符串去空格
在Python中,你可以使用 strip()
方法来去除字符串两端的空格(包括空格、制表符和换行符)。如果你只想去除字符串左边的空格,可以使用 lstrip()
方法;如果只想去除右边的空格,可以使用 rstrip()
方法。
以下是这些方法的使用示例:
5.9.1.1 strip() 方法:
my_string = " hello world "
stripped_string = my_string.strip()
print(stripped_string) # 输出: "hello world"
5.9.1.2. lstrip() 方法:
my_string = " hello world "
left_stripped_string = my_string.lstrip()
print(left_stripped_string) # 输出: "hello world "
5.9.1.3. rstrip() 方法:
my_string = " hello world "
right_stripped_string = my_string.rstrip()
print(right_stripped_string) # 输出: " hello world"
这些方法可以帮助你去除字符串中的不需要的空格,从而清理字符串的格式。
5.10 常用转义字符
在Python中,转义字符用于表示一些特殊的字符,例如换行符、制表符等。以下是一些常见的Python转义字符:
5.10.1 表格展示常用转义字符
转义字符 | 描述 |
---|---|
\n | 换行符。它将光标移动到下一行的开头。 |
\t | 制表符。它在输出时会产生一个水平制表符,通常相当于四个空格。 |
\\ | 反斜杠。用于表示反斜杠字符本身。 |
\' 和 \" | 单引号和双引号。用于在字符串中包含引号。 |
\b | 退格符。用于在输出中产生一个退格(删除)操作。 |
\r | 回车符。它将光标移动到当前行的开头。 |
5.10.2 代码展示常用转义字符
5.10.2.1. \n
:
换行符。它将光标移动到下一行的开头。
print("Hello\nWorld")
# 输出:
# Hello
# World
5.10.2.2. \t
:
制表符。它在输出时会产生一个水平制表符,通常相当于四个空格。
print("Hello\tWorld")
# 输出: Hello World
5.10.2.3. \\
:
反斜杠。用于表示反斜杠字符本身。
print("C:\\Users\\")
# 输出: C:\Users\
5.10.2.4. \'
和 \"
:
单引号和双引号。用于在字符串中包含引号。
print("She said, \"Hello!\"")
# 输出: She said, "Hello!"
5.10.2.5. \b
:
退格符。用于在输出中产生一个退格(删除)操作。
print("Hello\bWorld")
# 输出: HellWorld
5.10.2.6. \r
:
回车符。它将光标移动到当前行的开头。
print("Hello\rWorld")
# 输出: World
这些转义字符可以在字符串中使用,以表示字符串中的特殊含义。