上一篇:【Python】入门到放弃之第五章《运算符》
下一篇:【Python】入门到放弃之第七章《列表》
文章目录
前言
这是本系列的第六章节内容,《字符串》。不是串串,是字符串。
一、定义
字符串(String)是编程中常用的数据类型,用于表示文本数据。在Python中,字符串是不可变的(immutable),即一旦字符串被创建,就不能改变其内部的内容,但可以对字符串进行各种操作,如拼接、分割、查找、替换等,以生成新的字符串。
- 字符串是字符的有序集合,可以通过索引来访问字符串中的单个字符。
- 在Python中,字符串可以用单引号(‘)、双引号(")或三引号(’''或"“”)来表示。
- 三引号常用于表示多行字符串或包含特殊字符(如换行符、制表符等)的字符串。
二、索引
1.正向索引与负向索引
-
在Python中,字符串索引是一种访问字符串中特定位置字符的方式。字符串的索引从0开始,意味着字符串中的第一个字符的索引是0(类似C语言的数组),第二个字符的索引是1,依此类推。如果字符串的长度是n,那么它的最后一个字符的索引是n-1。
-
除了正向索引,Python还支持负向索引,它允许你从字符串的末尾开始访问字符。负索引-1表示字符串的最后一个字符,-2表示倒数第二个字符,依此类推。
代码如下(示例):
s = "花凝雨"
print(s[0]) # 输出: 花
print(s[1]) # 输出: 凝
print(s[-1]) # 输出: 雨
print(s[-3]) # 输出: 花
2.索引越界
- 除了单个字符的索引外,Python还支持字符串切片(slicing),它允许你获取字符串的一个子串。切片通过指定开始索引和结束索引(可选地包括步长)来工作,返回从开始索引到结束索引(但不包括结束索引)之间的所有字符。
代码如下(示例):
s = "花凝雨"
# print(s[4]) # 抛出 IndexError: string index out of range
# print(s[-4]) # 抛出 IndexError: string index out of range
3.切片
- 当尝试访问一个不存在的索引位置(无论是正向还是负向),Python将抛出一个IndexError异常。
代码如下(示例):
s = "花凝雨的入门到放弃"
print(s[1:6]) # 输出: 凝雨的入门
print(s[:3]) # 输出: 花凝雨,省略开始索引表示从字符串开头开始
print(s[4:]) # 输出: 入门到放弃,省略结束索引表示到字符串末尾结束
print(s[::2]) # 输出: 花雨入到弃,步长为2,意味着跳过每个字符
# 切片同样支持负索引,允许从字符串的末尾开始切片
print(s[-2:]) # 输出: 放弃,从倒数第三个字符到末尾
print(s[:-3]) # 输出: 花凝雨的入门,从开始到倒数第二个字符之前
三、拼接
1.加号(+)
- 一般用于连接少量的字符串。
代码如下(示例):
s1 = "Hello"
s2 = "world"
print(s1 + " " + s2) # 输出: Hello world
2.str.join() 方法
- 适用于连接多个字符串,尤其是列表中的字符串。
代码如下(示例):
s = ["Hello", "world"]
print(" ".join(s)) # 输出: Hello world
四、重复
- 使用乘号 *
代码如下(示例):
s = "ha"
print(s * 3) # 输出: hahaha
五、查找
- find() 方法:查找子串,如果找到则返回子串的最低索引,否则返回-1。
- index() 方法:与find()类似,但找不到子串时会抛出ValueError异常。
- count() 方法:返回子串在字符串中出现的次数。
代码如下(示例):
s = "Hello world hahaha"
print(s.find("world")) # 输出: 6
print(s.index("world")) # 输出: 6
print(s.count("ha")) # 输出: 3
六、替换
- replace() 方法:替换字符串中的某些部分。
代码如下(示例):
s = "Hello world"
print(s.replace("world", "Python")) # 输出: Hello Python
七、分割
- split() 方法:将字符串分割成列表。
代码如下(示例):
s = "Hello world Python"
print(s.split(",")) # 输出: ['Hello world Python']
八、格式化
- %操作符(旧式)
- str.format() 方法(现代)
- f-strings(Python 3.6+)
代码如下(示例):
name = "World"
print("Hello, %s!" % name) # 输出: Hello, World!
name = "Python"
print("Hello, {}!".format(name)) # 输出: Hello, Python!
name = "花凝雨"
print(f"Hello, {name}!") # 输出: Hello, 花凝雨!
九、去空白
- lstrip() 和 rstrip() 方法:分别用于去除字符串左端和右端的空白字符。
- strip() 方法:去除字符串两端的空白字符(包括\n、\r、\t、’ '等)。
代码如下(示例):
s = " Hello world "
print(s.strip()) # 输出: Hello world
十、大小写转换
- upper() 和 lower() 方法:将字符串转换为全大写或全小写。
- capitalize() 和 title() 方法:capitalize() 将字符串的第一个字符转换为大写,其余字符转换为小写;title() 将每个单词的首字母转换为大写,其余字符转换为小写。
代码如下(示例):
s = "Hello World"
print(s.upper()) # 输出: HELLO WORLD
print(s.lower()) # 输出: hello world
print(s.capitalize()) # 输出: Hello world
print(s.title()) # 输出: Hello World
十一、判断操作
1.检查字符串是否为空
- 使用 if not string: 来检查字符串是否为空(包括空字符串 ‘’ 和 None)。
2.检查字符串是否包含特定子串
- 使用 in 关键字,如 if substring in string:。
3.检查字符串是否以特定子串开始或结束
- 使用 str.startswith(prefix[, start[, end]]) 方法检查字符串是否以特定前缀开始。
- 使用 str.endswith(suffix[, start[, end]]) 方法检查字符串是否以特定后缀结束。
4.检查字符串是否全为大写或小写
- 使用 str.isupper() 方法检查字符串是否全为大写。
- 使用 str.islower() 方法检查字符串是否全为小写。
5.检查字符串是否全为字母、数字、空白字符
- str.isalpha() :检查字符串是否只包含字母。
- str.isdigit() :检查字符串是否只包含数字。
- str.isalnum() :检查字符串是否只包含字母和数字。
- str.isspace() :检查字符串是否只包含空白字符。
6.检查字符串是否满足特定模式
- 使用正则表达式模块 re 中的函数和方法,如 re.match(pattern, string)、re.search(pattern, string)、re.fullmatch(pattern, string) 等,可以检查字符串是否满足特定的模式。
7.检查字符串长度
- 使用 len(string) 获取字符串的长度,然后可以根据长度进行条件判断。
8.检查字符串是否全为可打印字符
- 使用 str.isprintable() 方法检查字符串是否包含所有可打印的字符或字符串末尾的空格,并且不包含控制字符。
9.检查字符串是否只包含ASCII字符
- 可以通过遍历字符串并检查每个字符的ASCII码值是否在0到127之间来实现,但这并不是字符串对象直接提供的方法。
10.检查字符串是否包含非空白字符
- 可以通过 if string.strip() : 来检查字符串在去除首尾空白字符后是否非空。
十二、编码与解码
1.编码
- 在 Python 3 中,字符串(str 类型)已经是 Unicode 编码的。如果需要将字符串编码为字节序列(例如,为了写入文件或发送网络请求),可以使用字符串的 .encode() 方法。.encode() 方法默认使用 ‘utf-8’ 编码,但可以指定其他编码方式。
代码如下(示例):
# 编码为 UTF-8
s = "你好,世界!"
bytes_utf8 = s.encode('utf-8')
print(bytes_utf8)
# 编码为 GBK(注意:如果字符串包含无法用GBK编码的字符,会抛出异常)
bytes_gbk = s.encode('gbk')
print(bytes_gbk) # 输出依赖于字符串内容和编码
输出如下(示例):
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7\xa3\xa1'
2.解码
- 当从文件或网络读取到字节序列时,需要将其解码为 Unicode 字符串,以便在 Python 中处理。这可以通过字节序列的 .decode() 方法完成。同样,.decode() 方法默认使用 ‘utf-8’ 编码,但可以指定其他编码方式。
代码如下(示例):
# 从 UTF-8 字节序列解码
bytes_utf8 = b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
s_decoded = bytes_utf8.decode('utf-8')
print(s_decoded) # 输出 "你好,世界!"
# 从 GBK 字节序列解码(注意:如果字节序列不是有效的 GBK 编码,会抛出异常)
bytes_gbk = b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7\xa3\xa1' # 这里有一段 GBK 编码的字节序列
s_decoded_gbk = bytes_gbk.decode('gbk')
print(s_decoded_gbk) # 输出依赖于字节序列内容和编码
输出如下(示例):
你好,世界!
你好,世界!
总结
以上,就是Python中字符串相关的主要内容。字符串是编程中非常基础且强大的数据类型,Python提供了丰富的字符串处理功能,使得在处理文本数据时更加灵活和方便。为什么每一篇都这么长啊?啊啊啊???不写了。