Python入门:字符串的简单操作——你真的了解Python字符串吗?

上一篇文章:Python入门:python解释器 交互模式——把Python当做计算器使用

这篇文章主要介绍数据类型之一——字符串。如果你刚接触 Python,可以慢慢读一下这篇文章,也可以浏览一下我的专栏:Python入门教程;如果已经有了一定的基础,可以阅读一下我的其他文章:
https://www.jianshu.com/u/07f03b92d7f0


读了这篇文章,你将收获:

  • Python 数据类型之一——字符串string
  • Python 中对字符串的简单操作

2. 字符串

2.1 字符串类型

除了上一篇文章中提到的数字,Python 还可以操作字符串string。在 Python 中,字符串是用单引号或双引号括起来的任意文本。字符串的声明有多种形式:单引号、双引号、三引号(包括三个单引号或三个双引号),单引号和双引号内的为单行的字符串,双引号内允许包含单引号,单引号内允许包含双引号。反斜杠(\)可以用来转义,如下:

>>> "双引号内允许包含'单引号'"
"双引号内允许包含'单引号'"
>>> '单引号内允许包含"双引号"'
'单引号内允许包含"双引号"'
>>> "反斜杠用来转义,比如双引号\",特殊字符要用反斜杠转义"
"反斜杠用来转义,比如双引号\",特殊字符要用反斜杠转义"
>>> 'What\'s this?'
'What\'s this?'

在交互式解释器中,输出的字符串外面会加上引号,特殊字符可以使用反斜杠来转义。单引号。print()函数会生成可读性更强的输出,它会略去两边的引号,并且打印出经过转义的特殊字符:

>>> 'He said, "Hello! "' # 如果字符串中有双引号而没有单引号,该字符串外将加双引号来表示
'He said, "Hello! "'
>>> print('He said, "Hello! "') # print函数会产生可读性更强的输出
He said, "Hello! "
>>> print('What\'s this?') # 打印出经过转义的特殊字符
What's this?
>>> print('换行符:\n通过转义特殊字符“n”实现换行') # \n可以实现换行
换行符:
通过转义特殊字符“n”实现换行

如果你不希望前置了\的字符转义成特殊字符,可以使用原始字符串方式,在引号前添加 r 即可:

>>> print('C:\some\name')  # \n可以实现换行
C:\some
ame
>>> print(r'C:\some\name')  # 在引号前添加r,使用原始字符串
C:\some\name

字符串字面值还可以跨行连续输入:用三引号:"""..."""'''...'''。字符串中的换行会自动包含到字符串中,如果不想包含,可以在行尾添加一个\。示例:

>>> print("""\
... Usage: thingy [OPTIONS]
...      -h
...      -H hostname
... """)
...
Usage: thingy [OPTIONS]
     -h
     -H hostname

字符串可以用+进行连接,也可以用*进行重复:

>>> print('py' + 'thon') # 连接字符串
python
>>> print('重要的事情说三遍!' * 3) # 重复三遍
重要的事情说三遍!重要的事情说三遍!重要的事情说三遍!

相邻的两个字符串字面值会被自动拼接在一起:

>>> 'py''thon'
'python'
>>> print('py''thon')
python

只能对两个字符串字面值这样操作,变量或表达式不行,否则会报错:

>>> py = 'Py'
>>> py 'thon'  # 不能对两个变量或表达式进行这样的操作
SyntaxError: invalid syntax
>>> ('py' * 3) 'thon'  # 不能对两个变量或表达式进行这样的操作
SyntaxError: invalid syntax

如果你想连接变量,或者连接变量和字符串字面值,可以用+号:

>>> py + 'thon' # 用 + 号可以连接字符串或表达式
'Python'
>>> ('py' * 3) + 'thon'
'pypypython'

2.2 字符串的索引和切片

在 Python 中,字符串可以被索引,也就是下标访问,通俗点说,就是通过序号获取字符串中某个位置的字符。字符串中的第一个字符的索引为 0:

>>> word = 'python'
>>> word[0] # 索引为0的字符,也就是第一个字符
'p'
>>> word[2] # 索引为2的字符,也就是第三个字符
't'

单个字符并没有特殊的类型,它只是一个长度为 1 的字符串。

字符串的索引还可以是负数,这时候将会从右边开始数,也就是反方向的索引,从字符串末尾计起。要注意:0 和 -0 是一样的,因此负数的索引应从 -1 开始:

>>> word[-1] # 索引为-1的字符,也就是倒数第一个字符
'n'
>>> word[-5] # 索引为-5的字符,也就是倒数第五个字符
'y'

你也可以这样理解索引,如下图,下面两行数字为索引,它们所指向的字符为它们右侧的字符,如 0 指向的是 p,-4 指向的是 t 。


示意图

除索引外,字符串还支持切片。索引可以获取字符串内的某个字符,而切片可以获取字符串内某个范围的子字符串:

>>> word[0:2]
'py'
>>> word[2:0]
'thon'

注意切片的开始总是被包括其中,而结束不会被包括。

切片的索引有默认值,省略起始值则默认为 0,省略结束值则默认为字符串的末尾:

>>> word[:]
'python'
>>> word[:2]
'py'
>>> word[:3] + word[3:]
'python'

你也可以这么理解切片,还是这张图,切片即是起止索引间所有字符:

示意图

如果索引没有越界,那么切片得到的字符串长度就是起止索引的差,例如word[0:2]的长度为2。

试图使用过大的索引将会产生一个错误:

>>> word[50] # 索引超过字符串范围
Traceback (most recent call last):
  File "", line 1, in 
    word[50]
IndexError: string index out of range

但是切片中索引的越界会被自动处理:

>>> word[3:50]
'hon'

Python 中的字符串是不能被修改的,只能重新被赋值,它们是 immutable (不可变)类型的,因此,尝试修改字符串的值的时候会产生一个错误:

>>> word[0] = 'h'
Traceback (most recent call last):
  File "", line 1, in 
    word[0] = 'h'
TypeError: 'str' object does not support item assignment
>>> word[0:2] = 'hh'
Traceback (most recent call last):
  File "", line 1, in 
    word[0:2] = 'hh'
TypeError: 'str' object does not support item assignment

如果想要一个不同的字符串,应当新建一个或重新赋值:

>>> 'h' + word[1:]
'hython'
>>> word = 'h' + word[1:]
>>> print(word)
hython

函数len()可以返回一个字符串的长度:

>>> len(word)
6

2.3 进阶:字符串的方法

以下为操作字符串的一些方法,可能会有一些难度,建议收藏。

方法 描述
str.count(sub[, start[, end]]) 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数,可选参数 start 与 end 会被解读为切片表示法
str.find(sub[, start[, end]]) 返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。 可选参数 start 与 end 会被解读为切片表示法。 如果 sub 未被找到则返回 -1
str.index(sub[, start[, end]]) 类似于 find(),但在找不到子类时会引发 ValueError
str.isalnum() 如果字符串中的所有字符都是字母或数字且至少有一个字符,则返回 True , 否则返回 False
str.isalpha() 如果字符串中的所有字符都是字母,并且至少有一个字符,返回 True ,否则返回 False
str.isdigit() 如果字符串中的所有字符都是整数,并且至少有一个字符,返回 True ,否则返回 False
str.islower() 如果字符串中至少有一个区分大小写的字符,且此类字符均为小写则返回 True ,否则返回 False
str.isnumeric() 如果字符串中至少有一个字符且所有字符均为数值字符(包括中文),则返回 True ,否则返回 False
str.isspace() 如果字符串中只有空白字符且至少有一个字符则返回 True ,否则返回 False
str.istitle() 如果字符串中至少有一个字符且为标题字符串则返回 True ,例如大写字符之后只能带非大写字符而小写字符必须有大写字符打头。 否则返回 False
str.isupper() 如果字符串中至少有一个区分大小写的字符 4 且此类字符均为大写则返回 True ,否则返回 False
str.lower() 返回原字符串的副本,其所有区分大小写的字符 4 均转换为小写
str.replace(old, new[, count]) 返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。 如果给出了可选参数 count,则只替换前 count 次出现
str.split(sep=None, maxsplit=-1) 返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)
str.strip([chars]) 返回原字符串的副本,移除其中的前导和末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空白符。 实际上 chars 参数并非指定单个前缀或后缀;而是会移除参数值的所有组合
str.upper() 返回原字符串的副本,其中所有区分大小写的字符均转换为大写

以上内容参考自 Python 教程 —— Python 3.8.11文档


后记

这篇文章就到这里了。
下一篇文章主要内容:列表 list
文集:Python入门
接下来我们将学习在 Python 解释器内对列表进行一些简单的操作。

CSDN同名搜 H_612,看更多Python文章
CSDN博客:https://blog.csdn.net/weixin_52132159

你可能感兴趣的:(Python入门:字符串的简单操作——你真的了解Python字符串吗?)