【Python】入门到放弃之第六章《字符串》

上一篇:【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提供了丰富的字符串处理功能,使得在处理文本数据时更加灵活和方便。为什么每一篇都这么长啊?啊啊啊???不写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值