python3xiaobaike_2020/chapter2/2-9 python3小白课:字符串进阶.md
2025-04-20 23:22:14 +08:00

237 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课字符串进阶
之前我们学习了python字符串的入门知识它们内容不少不知道大家消化得怎么样了呢
这节课我们来学习一些字符串的进阶知识,掌握好本节课的内容,对你高效的使用字符串帮助颇大,我们依然提取最精练的内容传授给大家。
---
### 转义字符
之前我们讲解过`\`符号可以作为转义字符。除了之前教学的场景之外python还能支持一些其他的转义符我们来列举常用的一些
```python
# coding:utf-8
# \n表示换行符比较常用到
a = "我是第一行\n我是第二行"
print(a)
# 当我们要循环打出一段字符串的时候,不需要写多遍,用*号后面加上重复的次数即可比如这里打印40个*号
print("*" * 40)
# \t表示制表符类似你键盘上的Tab键的距离
b = "我是第一行\t我是第二行"
print(b)
```
上面的例子包含的知识点挺多哦,好好学习下。
其他还有一些自带支持的转义符我们就不一一列举了,感兴趣的同学可以自行找下资料。
---
### 格式化字符串
还记得我们入门的时候,使用的是`+`号的方法把字符串联结起来,当遇到不同类型的数据的时候,我们需要把数据先转换成字符串型。这样有几点不便,其中的一点是,当字符串中的变量太多,需要写多个+号来联结,另一点是要经常关注数据类型,容易报错等。
这时候,我们更常用更常见的神器,格式化字符串,来了!
先来看下例子感受一下,我用了日常编程中更为常见的转换说明符来写:
```python
# coding:utf-8
a = "我的名字是%s,我的年龄是%d\n我知道,π的值为%.2f" % ("小白", 18, 3.1415926)
print(a)
b = "现在你在【%s】学习python小白课呢~" % "雪山凌狐教程"
print(b)
```
来我们来看一下,这两句示例代码都先用字符串定义了一串的内容,空格之后跟了一个`%`符号,再空格之后,对应的写入了一些内容,有的用括号括起来了,有的没用,对吧?
那么我们首先看一下第一部分的字符串内容,通过对比输出结果,我们可以看到,我们在字符串中也有`%`号,并且后面跟了一些字母等内容。接下来我们就来解释一下我们用到的几个转换说明符:
| 转换说明符 | 说明 |
| ---------- | ------------------------------------------------------------ |
| %s | 将内容变量或者表达式用str命令转换为字符串 |
| %d | 转换为带符号的十进制形式的整数 |
| %f | 转换为十进制形式的浮点数,.num表示保留小数点后面num位如果给的值不够这个num大则会补位 |
其他一些转换说明符还有,不过掌握几个常见的日常也基本够用了,这样大家记忆起来就不费力。如果你对其他的说明符感兴趣,可以自行查阅资料。
然后接下来是一个固定的`%`符号作为分隔符。
最后就是我们的内容了,内容可以直接写值也可以支持变量或者表达式的形式。如果前面的字符串定义了多个,需要用逗号`,`隔开并且外面套上小括号需要注意的是前面定义了几个后面就给几个不要数量不正确否则会报错哦。如果只定义了一个那么直接写它就可以了。将一些内容用小括号括起来在python中叫做`元组tuple`。有关元组的知识后面我们会另外再重点讲解,你稍微知道一下即可。
怎么样?是不是很方便?+号是不是少写了很多?
### format函数
这也是实战中用得比较多的格式化字符串的方法,我们来看个简单的例子就懂了:
```python
# coding:utf-8
# format函数的参数中可以带上参数名可以不按顺序如果不带参数名就必须按顺序给值
a = "我的名字是{name},我的年龄是{age}".format(age=18, name="小白")
print(a)
# 也可以这样写和定义
a = "我的名字是{},我的年龄是{}".format("小白", 98)
print(a)
```
很简单,会了吗?用上`{}`大括号即可。
### f-string
上述的格式化方法是过去的版本python一直都有的我们这里补充讲解一下据说是python3.6版本以上才新加的东东——`f-string`让我们也来潮流一把。它可能比format函数更加顺畅哦。
`f-string`亦称为格式化字符串常量formatted string literals是Python3.6新引入的一种字符串格式化方法,主要目的是使格式化字符串的操作更加简便。
来我们直接看例子:
```python
# coding:utf-8
name = "小白"
age = 18
a = f"我的名字是{name},我的年龄是{age}"
print(a)
```
其实在这里大括号的作用是一个python表达式你还可以在大括号里面写表达式的。基础使用我们就讲到这里吧它的强大之处远远不止这些如果你想深入了解百度一下`f-string`即可得到很多你想要的答案了。
---
### 字符串索引及相关方法
很多时候,我们仅需要取出一串字符串中的某些个内容,那么如何取出呢?这里我们来介绍一下索引的概念。
比如我们定义一个最简单的字符串:`a = "hello"`
如果你算术够好,肯定能掰出五个手指头告诉我这里有**5**个字母。那么我们可以给他们每个字母编制一个索引。
> [!danger]
>
> 在python中索引从**0**开始务必记住是0不是1很多编程语言的索引都从0开始个别从1开始索引这对于我们日常说一楼就是一楼的人有点难抽象出来但定义如此请你死记硬背好~
所以,我们的五个字母的索引分别为:`0, 1, 2, 3, 4`
我们用`[]`中括号表示索引如果需要取出字母e我们可以这样表示`print(a[1])`
我们还可以有其他写法,看例子:
```python
# coding:utf-8
a = "hello"
# 我们有如下索引对应关系:
# [h -> 0], [e -> 1], [l -> 2], [l -> 3], [o -> 4]
print(a[1])
# 取出从右边开始第1个字符
print(a[-1])
# 取出索引从2到4不含4的字符即索引2~3的字符注意写冒号的话永远是包含头索引不包含尾索引
print(a[2:4])
# 取出倒数第3到倒数第1不包含倒数第1的字符串不能反过来写哦
print(a[-3:-1])
# 取出索引为2之后的所有字符串
print(a[2:])
# 取出索引为1不包含1之前的所有字符串
print(a[:1])
# 用in运算符判断某字符串在不在原字符串里面在返回True真不在返回False假这个布尔型我们之前讲过
print("lo" in a)
# 获取字符的总长度可以使用len函数
print(len(a))
# 经过测试,对于中文字符串,它的数数也是按照英文字符串那样来数的,你可以自行深入测试
b = "我是小白little bai"
print(b[1])
```
---
### 字符串str类型自带的一些内置方法
字符串还有一些它内置的方法,让我们处理起字符串来可以得心应手。
我们可以通过`dir(str)`命令查看内置的方法有哪些dir命令也能查看其它类的内置方法这个大家可以自己探索下。运行后会返回一个命令列表list关于列表的知识我们在后面的课程中会详细的讲解大家稍微知道一下中括号括起来的是一个列表就可以了。
我这里运行结果如下:
```python
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```
> [!note]
>
> 方法有很多,其中我们注意到有很多方法开头结尾都有`__`双下划线符号这些命令为python系统定义的名字是特殊方法专用的标识请不要自己随意定义这类命令。
剩下的那些就是内置类方法啦里面太多了如果你感兴趣可以使用我们学过的help命令来查看帮助文档哦。我们来挑一些重点的来写示例讲解
```python
# coding:utf-8
# 大小写相关方法
a = "my name is liTTle bai 小白"
# title方法将每个单词首字母改为大写
print(a.title())
# lower方法将每个字母改为小写。比如在比较文件后缀名时十分有用
print(a.lower())
# upper方法将每个字母改为大写
print(a.upper())
# 删除空白相关方法,空格,制表符等都可以
b = " my name is liTTle bai 小白 "
# strip方法删除首尾的空白
print(b.strip())
# lstrip方法删除左边left的空白
print(b.lstrip())
# rstrip方法删除右边right的空白
print(b.rstrip())
# 补充一句,这些方法有时候是可以嵌套的,不用写多行来处理,比如先变小写再删首尾空
print(b.lower().strip())
# 查找替换相关方法
c = "my name is little bai 小白"
# startswith方法判断字符串是不是以传入的参数开头会返回布尔型返回值真或假
print(c.startswith("my"))
# endswith方法判断字符串是不是以传入的参数结尾会返回布尔型返回值真或假
print(c.endswith("bai"))
# find方法获取参数在字符串中出现的位置索引没有找到返回-1
print(c.find("is"))
# replace方法将字符串中的某些内容如有替换成别的内容
print(c.replace("小白", "小黑"))
# 分割、连接方法
# split方法将字符串按照指定的分割符分割文本默认分割符如果不写为空格可以是多个空格
d = "my name is liTTle bai 小白" # 出来的结果是一个列表list后面我们可以再做详细讲解如何后续处理
print(d.split())
# join方法刚才分割的反向操作把一个列表的每个元素列表中逗号分隔开的一个个称作元素
# 按照指定的连接符(比如点号.)连接起来
print(".".join(d.split()))
```
说了这么多,可能大家都已经有些晕晕乎乎的了。不过没关系,本节课值得大家细细品味,如果一遍没有掌握,请多回来看几遍,记住常用的那些命令的单词,当你需要的时候就很容易了,它们的使用都是相当简单的。
### 单词释义
| 单词 | 释义 |
| ------------------------- | ------------------------------------------- |
| Tab | 这里指键盘上的Tab键会输出一个制表符\t |
| num | number数字的简写 |
| tuple | 元组 |
| format | 格式化 |
| formatted string literals | 格式化字符串常量 |
| dir | 全称为directory你可以理解为目录罗列出来 |
| list | 列表 |
| in | 在...里面 |
| len | length长度的简洁写法这里是一个命令名 |
| title | 标题,这里是一个命令名 |
| lower | 下面的 |
| upper | 上面的 |
| strip | 除去,剥去 |
| lstrip | 应该是left strip的简写left为左边 |
| rstrip | 应该是right strip的简写right为右边 |
| startswith | start开始with结合上下文理解为跟着啥 |
| endswith | end结束with结合上下文理解为跟着啥 |
| find | 寻找 |
| replace | 替换 |
| split | 分割,分裂 |
| join | 连接,加入 |