【Python知识点共建】字符串方法

256 阅读9分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

Python 字符串方法是什么

Python 字符串是 Python 内置的一种数据类型,本篇博客要学习的内容就是字符串对象的方法。

先来学习第一个知识点,Python 字符串,字符串是一个编程名词,翻译过来就是字符组成的串(跟没说一样)

在 Python 中,用引号来表示字符串,例如 双引号 ",单引号 ',还有一个奇葩的三引号 """,对应的三单引号 '''

所以下述代码都是在 声明 一个字符串。

name = "橡皮擦"
name = '橡皮擦'
name = """橡皮擦"""
name = '''橡皮擦'''

此时你应该尝试输入一下上述代码,找找编程的感觉,如果你能得到如下几个结论,证明水平还不错。

  • 引号都是成对出现的,前面一个后面一个;
  • 单引号对应单引号,双引号对应双引号,三引号对应三引号;
  • 所有引号都是在英文模式下输入的,不能用中文的引号。

字符串会伴随我们的整个编程生涯,几乎每段代码都会碰到,因此咱们将其放在一开始就进行讲解。

怎么用

截止目前,你只接触到了 Python 字符串的概念,那你来看一下 '1' 是字符串吗? 答案肯定是,因为 1 被单引号包裹起来了。

既然字符串是一个字符的串,那你就可以把它当成糖葫芦串,你可以对糖葫芦做什么,就能对字符串做什么, 例如吃第一个,吃最后一个,吃中间的 2 个,在头上插入一个山楂,在尾部插入一个山楂,数数山楂的数量……

这些对应到 Python 字符串中,就是各种编程语法,编程概念,咱们一起翻译翻译。

我有一个字符串(糖葫芦),我要吃第一个

tang_hu_lu = "都说冰糖葫芦儿酸" # 声明字符串
print(tang_hu_lu) # 打印输出字符串
print(tang_hu_lu[0]) # 打印字符串的第一个字符

注意代码都是在 jupyter 中进行编写,然后点击运行实现效果,运行的快捷键是 shift+enter

又是一段代码,里面又涉及了很多编程概念,例如 tang_hu_lu 你已经知道它是一个变量了, 但是 Python 变量是有命名规范的,例如 1_a 就是错误的,命名规范是啥呢? 学习建议是直接搜索,只有一个原则需要告诉你,就是命名尽量有含义,哪怕你用拼音。

# 表示注释,相当于备注的意思,写在 # 后面的内容不会被 Python 软件 执行。 tang_hu_lu[0] 这里就有趣了,在变量名称后面跟了一个中括号[],并且在里面写了一个数字 0, 它表示取这个串里面的第一个字符,在编程语言中,报数一般从 0 开始,也就是 0 表示第一位, 是不是又有疑问了,为啥这么安排?

知道二进制不?二进制用 01 表示,所以从 0 开始数。

取第一个字符咱们已经会了,那最后一个呢

tang_hu_lu = "都说冰糖葫芦儿酸" # 声明字符串
print(tang_hu_lu) # 打印输出字符串
print(tang_hu_lu[-1]) # 打印字符串的最后一个字符
print(tang_hu_lu[7]) # 打印字符串的最后一个字符

上述代码就实现了,注意中括号里面的数字 [-1] 就是倒着数最后一个,当然你可以顺着数, 数到 7 就是第八个山楂了,这里尝试把 7 修改成 8 ,看一下会报什么错误吧。

写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~ 到这里就不得不抛出一个新的名词了,索引,刚才中括号中的数字就是 索引值,又是一个新概念,这就是编程。

字符串的第一个和最后一个你都能获取到了,吃中间的怎么办

tang_hu_lu = "都说冰糖葫芦儿酸" # 声明字符串
print(tang_hu_lu) # 打印输出字符串
print(tang_hu_lu[2:4]) # 输出冰糖
print(tang_hu_lu[3:5]) # 输出糖葫

注意中括号扩展了,变成了 2 个数字,中间还有一个英文的冒号,此时一定要对比着原字符串进行学习。

- 都说冰糖葫芦儿酸
- 0 1 2 3 4 5 6 7

看好各个的位置

  • [2:4] 输出冰糖,分别对应索引 2,索引 3 位置的字符;
  • [3:5] 输出糖葫,分别对应索引 3,索引 4 位置的字符;

[0:6] 你知道输出什么了吗?能说出来,恭喜你,Python 字符串切片你已经掌握 90%了,想不到吧,又是一个新概念, 切片,多么形象!

字符串扩展方法

字符串除了切片用法以外,还可以使用一个新的概念,叫做 对象的方法,在 Python 中有一个说法,叫做万物皆对象(对象的概念我们在后文展开学习,现在知道这么回事即可),例如现在有一个字符串,内容是 "都说冰糖葫芦儿酸"

先看代码

my_str = "都说冰糖葫芦儿酸"
a = my_str.find("糖")
print(a) # 输出内容为 3

find() 方法

上述代码中,在字符串变量 my_str 的后面增加一段代码 .find("糖"),其中 .find() 就是一个字符串对象的方法,它的用途你顺着刚才的代码在细琢磨,就能知道,是查找 "糖" 这个小字符串在大字符串中的索引值。

同理,还有哪些需要掌握的字符串对象方法呢?

my_str = "AaBbCcDd"
new_my_str = my_str.title()
print(new_my_str) # Aabbccdd

title() 方法

.title() 方法表示将字符串首字母大写

my_str = "AaBbCcDd"
new_my_str = my_str.upper()
print(new_my_str) # AABBCCDD

**upper() 方法和 lower() 方法 **

.upper() 方法表示将字符串全部大写,全部小写是 .lower()

字符串去除左右两端的空格。

my_str = " AaBbCcDd "
new_my_str = my_str.strip()
print(new_my_str)

除了这些,字符串对象的方法还有很多,但是不需要记忆,你需要去搜索一些相关的博客进行阅读, 搜索关键字为 Python 字符串方法,然后看上几篇博客,最终得到下面这个结论:

“哦~字符串对象有这些方法,可以大小写转换,可以去除空格,可以检索字符串,可以统计字符出现次数, 还能判断字符串中字符内容……”

子串搜索相关方法

count() 方法 语法格式如下所示:

my_str.count(sub_str[, start[, end]])

返回字符串 my_str 中子串 sub_str 出现的次数,可以指定从开始(start)计算到结束(end)。

print('abcaaabbbcccdddd'.count('a'))

endswith()和 startswith() 方法原型如下

my_str.endswith(suffix[, start[, end]])
my_str.startswith(prefix[, start[, end]])

endswith() 检查字符串 my_str 是否以 suffix(可以是一个元组) 结尾,返回布尔值的 True 和 False。 startswith() 用来判断字符串 my_str 是否是以 prefix 开头。

find(),rfind()和 index(),rindex() 函数原型如下所示:

my_str.find(sub[, start[, end]])
my_str.rfind(sub[, start[, end]])
my_str.index(sub[, start[, end]])
my_str.rindex(sub[, start[, end]])

find() 搜索字符串 my_str 中是否包含子串 sub,包含返回 sub 的索引位置,否则返回"-1"。

index()find() 不同点在于当找不到子串时,抛出ValueError错误。

替换相关方法

replace()

my_str.replace(old, new[, count])

将字符串中的 old 替换为 new 字符串,如果给定 count,则表示只替换前 count 个 old 子串。

分割和合并

split()、rsplit()和 splitlines()

my_str.split(sep=None, maxsplit=-1)
my_str.rsplit(sep=None, maxsplit=-1)
my_str.splitlines([keepends=True])

split() 根据 sep 对 my_str 进行分割,maxsplit用于指定分割次数。

splitlines() 用来分割换行符。

join()

my_str.join(iterable)

将可迭代对象中的元素使用字符 my_str 连接起来。

修剪

strip()、lstrip()和 rstrip()

my_str.strip([chars])
my_str.lstrip([chars])
my_str.rstrip([chars])

分别是移除左右两边、左边、右边的字符 char。默认移除空白(空格、制表符、换行符)。

内置函数

学到这里,还有一个概念要接触一下,内置函数,现在的需求如下所示, 我们需要统计有多少个糖葫芦,即字符串有多少个字符,先看代码,如下所示:

my_str = " AaBbCcDd "
len_my_str = len(my_str)
print(len_my_str) # 统计到了 10个

上述代码中的 len() 就是一个 Python 内置函数,它表示统计长度, 注意看内置函数和刚才学到的方法之间的差异,len() 函数,前面并没有对象去调用它, 调用 其实也是一个编程概念,就是那个 . 符号。

统计过程,你也会注意到 " AaBbCcDd " 算上空格,恰好是 10 个 字符,所以得出空格也是字符,这个基本认知。

后续我们还会学习更多的内置函数,接下来在学习 2 个,这两个有助于提高编程效率。

第一个是 help(),该函数用来查看编程对象的帮助手册,例如下述代码

my_str = " AaBbCcDd "
help(my_str )

不过该代码无法在 jupyter 中运行,会得到如下结果 写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~ 这里可以直接输入 help(),进入手册模式,在进行查询即可。 写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~ 在文本框输入 str,就可以获取到帮助手册中的相关内容,也就是获取到了字符串对象的相关方法。

第 3 个要学习的内置函数是 dir(),使用该函数可以直接把对象支持的方法全部输出。

my_str = " AaBbCcDd "
print(dir(my_str))

写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~jupyter 的使用过程中,如果出现了 In [*],表示命令没有执行完毕,需要点击菜单栏的 Kernel,然后重启服务。 写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~ 写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~

字符串格式化

在 Python 中,字符串格式化有三种方式,分别为 % 占位符格式化,format() 方法格式化,以及 f-string, 重点学习的是第二种和第三种方式进行格式化,例如下述代码:

my_str = "小爱同学,今天天气"
answer_str = "今天的天气是: {}".format("晴")
print(answer_str)

第二个字符串中出现了一个大括号 {},然后通过 format() 函数对其进行了填充, 同理,大括号可以出现多个,也可以有名称,例如下述代码:

# 多个大括号,format() 方法中需要多个值进行填充
my_str = "小爱同学,今天天气"
answer_str = "今天上午的天气是: {},下午的天气是:{}".format("晴","多云")
print(answer_str)
# 大括号中有占位符
my_str = "小爱同学,今天天气"
answer_str = "今天上午的天气是: {shangwu},下午的天气是:{xiawu}".format(shangwu="晴",xiawu="多云")
print(answer_str)

在使用占位符的时候注意下,前后要一致,否则会出错的。

上述代码其实用到了函数相关支持,这些随着我们的学习,都将逐步展开,当下最有效的学习方式,就是临摹一遍代码啦。