前面的博客,我们讲了Python的六大数据类型中的数字类型及其操作方法(Python基础知识:数字类型及数学函数详解)。相信大家都能有所理解。那么现在,我们来讲Python的六大数据类型的字符串类型及其方法。
目录
1. 字符串类型
2. 三引号
3. 转义字符
4. 字符串更新操作
5. 字符串运算符
6. 字符串内建函数
对于Python而言,字符串类型应该是数字类型之后,最基本的数据类型之一、顾名思义,字符串它由一系列字符组成,用于存储和处理文本信息。在Python提供了丰富的字符串操作方法,用于对字符串进行各种操作,例如截取、连接、查找、替换、格式化等等。这一篇博客,我们将介绍 Python 中字符串的基本操作和常用方法,包括字符串类型、更新操作、转义字符、运算符、格式化、三引号、字面量格式化字符串以及内建函数等。
1. 字符串类型
在python中,字符串类型需要使用单引号(')或双引号(")来创建字符串,同时一些特殊的转义符,需要“ \ ”来配合使用。
字符类型为:变量[头部下标:尾部下标]
下图就是Python的字符串的结构:
上图,假设String的坐标为:TiYong,那么它有6个值,其中正向坐标是0-5,反向坐标就是-1--5。
字符的操作,往往是以坐标索引进行操作的。下面是示例代码:
string1 = 'Hello, World!' # 单引号
string2 = "Python is amazing!" # 双引号
string3 = "Python is amazing!\tUsing Escapes!" # 转义符\t,标识制表符
print(string1)
print(string2)
print(string3)
输出如下:
Hello, World!
Python is amazing!
Python is amazing! Using Escapes!
可以看到,制表符\t,实现了分隔。
你可能会疑问单引号(')和双引号(")在Python中有什么不一样。其实,单引号(')和双引号(")都可以用来表示字符串。它们的基本功能是相同的,但是有一些区别。
a.仅仅是字符串表示时,两者是一致的:
- 使用单引号:
'Hello, World!'
- 使用双引号:
"Hello, World!"
b.包含特殊引号时,两者需要区分:
- 如果字符串本身包含单引号,可以使用双引号来定义字符串:
"I'm learning Python."
- 如果字符串本身包含双引号,可以使用单引号来定义字符串:
'He said, "Hello!"'
c.用法上的差异:
- 单引号和双引号在ython中是等效的,可以根据个人偏好选择其中一种。
- 在一些风格指南中,有建议说在大多数情况下应该优先使用单引号,例如 PEP 8。
2. 三引号
上面我们讲了单引号(')和双引号("),那么,有时你想写一大段字符,不想写在一行,需要跨行字符。那么,三引号可以用来表示多行字符串。
示例代码:
multiline_string = '''This is a
multiline
string.'''
print(multiline_string)
输出结果:
This is a
multiline
string.
可以看到,输出的结果就是代码的输入。也就是所见及所得格式(WYSIWYG)了。
3. 转义字符
转义字符用来在字符串中表示一些特殊的字符,例如换行符 \n
、制表符 \t
等。下面是一些常见的转义字符:
转义字符 | 描述 |
\a | 响铃 (Bell) |
\f | 换页 (Formfeed) |
\v | 垂直制表符 (Vertical tab) |
\ooo | 八进制数 ooo 所代表的字符 |
\xhh | 十六进制数 hh 所代表的字符 |
\N{name} | Unicode 数据库中字符名称 name |
\t | 水平制表符 (Tab) |
\r | 回车 (Carriage return) |
\b | 退格 (Backspace) |
\f | 换页 (Formfeed) |
\n | 换行 (Linefeed) |
\v | 垂直制表符 (Vertical tab) |
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
转义字符的示例代码:
# 使用响铃和换页
print("响铃示例:Hello\aWorld!")
print("换页示例:Hello\fWorld!")
# 八进制和十六进制字符
print("八进制示例:\110\145\154\154\157") # 输出:Hello
print("十六进制示例:\x48\x65\x6c\x6c\x6f") # 输出:Hello
# 使用 Unicode 数据库中的字符名称
print("Unicode 数据库中的字符名称示例:\N{GREEK CAPITAL LETTER DELTA}")
# 垂直制表符示例
print("垂直制表符示例:Hello\vWorld!")
# 反斜杠自身,单引号和双引号
print("反斜杠自身示例:\\这是一个反斜杠")
print("单引号示例:\'这是一个单引号")
print("双引号示例:\"这是一个双引号")
输出结果:
响铃示例:HelloWorld!
换页示例:Hello
World!
八进制示例:Hello
十六进制示例:Hello
Unicode 数据库中的字符名称示例:Δ
垂直制表符示例:Hello
World!
反斜杠自身示例:\这是一个反斜杠
单引号示例:'这是一个单引号
双引号示例:"这是一个双引号
4. 字符串更新操作
Python 中的字符串是不可变的,也就是说,不能直接修改字符串的值。但也有办法,比如说,通过重新赋值来更新字符串变量的内容。下面给大家提供三种常用的方法。
a.使用 +
运算符连接字符串:
str1 = 'Hello, '
str2 = 'world!'
str3 = str1 + str2
print(str3) # 输出:Hello, world!
b.使用 str.format()
方法格式化字符串:
name = 'TiYong'
age = 25
str1 = 'Hello, {}! You are {} years old.'.format(name, age)
print(str1) # 输出:Hello, TiYong! You are 25 years old.
c.使用 f-strings
格式化字符串: f-strings是Python 3.6 引入的,它是一种在字符串中直接插入变量值的简洁方法。使用 f
或 F
字母作为前缀,并在字符串中使用大括号 {}
来插入变量。
name = 'TiYong'
age = 25
str1 = f'Hello, {name}! You are {age} years old.'
print(str1) # 输出:Hello, TiYong! You are 25 years old.
可能细心的朋友就会发现了,字符串改变吗?其实没有,对吧!只是换一个变量来存储。
5. 字符串运算符
在Python中,字符串也是支持一些基本的运算符,常见的如连接运算符 +
和重复运算符 *
等。下面列出了一些运算符操作。
运算符 | 描述 | 示例 |
+ | 字符串连接 | "Hello" + "World" |
* | 重复输出字符串 | "Hello" * 3 |
[] | 通过索引获取字符串中的字符 | "Hello"[1] |
[:] | 截取字符串中的一部分 | "Hello"[1:4] |
in | 如果指定的字符在字符串中则返回 True | "H" in "Hello" |
not in | 如果指定的字符不在字符串中则返回 True | "H" not in "Hello" |
示例代码:
# 字符串连接
str1 = "Hello"
str2 = "World"
result = str1 + " " + str2
print("字符串连接示例:", result) # 输出:Hello World
# 重复输出字符串
str_repeat = "Python " * 3
print("重复输出字符串示例:", str_repeat) # 输出:Python Python Python
# 通过索引获取字符串中的字符
char_at_index = "Python"[2]
print("获取字符串中的字符示例:", char_at_index) # 输出:t
# 截取字符串中的一部分
substring = "Python"[1:4]
print("截取字符串中的一部分示例:", substring) # 输出:yth
# 使用 in 运算符
check_in = "H" in "Hello"
print("使用 in 运算符示例:", check_in) # 输出:True
# 使用 not in 运算符
check_not_in = "H" not in "Hello"
print("使用 not in 运算符示例:", check_not_in) # 输出:False
输出结果:
字符串连接示例: Hello World
重复输出字符串示例: Python Python Python
获取字符串中的字符示例: t
截取字符串中的一部分示例: yth
使用 in 运算符示例: True
使用 not in 运算符示例: False
6. 字符串内建函数
在Python中,有丰富的字符串内建函数,用于字符串进行各种操作。下面是一些常用的字符串内建函数:
函数 | 描述 |
capitalize() | 将字符串的第一个字符转换为大写 |
casefold() | 将字符串转换为小写,并且移除大小写区别 |
center(width, fillchar) | 返回一个指定宽度的居中对齐的字符串,fillchar 为填充的字符 |
count(substring, start, end) | 返回字符串中指定子串出现的次数 |
encode(encoding="utf-8", errors="strict") | 返回字符串的编码版本 |
endswith(suffix, start, end) | 检查字符串是否以指定后缀结束 |
expandtabs(tabsize=8) | 将字符串中的制表符替换为空格,默认制表符大小为 8 |
find(substring, start, end) | 返回指定子串在字符串中第一次出现的位置,如果未找到返回 -1 |
index(substring, start, end) | 返回指定子串在字符串中第一次出现的位置,如果未找到则会引发 ValueError |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True |
isascii() | 如果字符串中的所有字符都是 ASCII 字符则返回 True |
isdecimal() | 如果字符串只包含十进制数字则返回 True |
isdigit() | 如果字符串只包含数字则返回 True |
isidentifier() | 如果字符串是一个有效的标识符则返回 True |
islower() | 如果字符串中至少包含一个区分大小写的字符,并且所有这些字符都是小写,则返回 True |
isnumeric() | 如果字符串中只包含数字字符,则返回 True |
isprintable() | 如果字符串中的所有字符都可打印则返回 True |
isspace() | 如果字符串中只包含空格,则返回 True |
istitle() | 如果字符串是标题化的(每个单词的首字母大写),则返回 True |
isupper() | 如果字符串中至少包含一个区分大小写的字符,并且所有这些字符都是大写,则返回 True |
join(iterable) | 使用字符串将序列中的元素连接起来生成新字符串 |
ljust(width, fillchar) | 返回一个左对齐的指定宽度的字符串,fillchar 为填充的字符 |
lower() | 将字符串中所有大写字符转换为小写 |
lstrip(characters) | 去掉字符串左边的指定字符,默认为空格 |
partition(separator) | 根据指定的分隔符将字符串分割成三部分,返回一个元组 |
replace(old, new, count) | 替换字符串中的指定字符或子串 |
rfind(substring, start, end) | 返回指定子串在字符串中最后一次出现的位置,如果未找到返回 -1 |
rindex(substring, start, end) | 返回指定子串在字符串中最后一次出现的位置,如果未找到则会引发 ValueError |
rjust(width, fillchar) | 返回一个右对齐的指定宽度的字符串,fillchar 为填充的字符 |
rpartition(separator) | 根据指定的分隔符将字符串从右边开始分割成三部分,返回一个元组 |
rsplit(separator, maxsplit) | 从字符串的右边开始根据指定的分隔符分割字符串 |
rstrip(characters) | 去掉字符串右边的指定字符,默认为空格 |
split(separator, maxsplit) | 根据指定的分隔符分割字符串 |
splitlines(keepends) | 按照换行符分割字符串,并返回包含各行作为元素的列表 |
startswith(prefix, start, end) | 检查字符串是否以指定前缀开始 |
strip(characters) | 去掉字符串两边的指定字符,默认为空格 |
swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
title() | 返回标题化的字符串(每个单词的首字母大写) |
translate(table) | 根据 table 的规则(可以由 str.maketrans('a', 'b') 定义)转换字符串中的字符 |
upper() | 将字符串中所有小写字符转换为大写 |
zfill(width) | 返回一个指定宽度的字符串,原字符串右对齐,前面填充 0 |
示例代码:
# capitalize() - 将字符串的第一个字符转换为大写
string = "hello world"
print("capitalize()示例:", string.capitalize()) # 输出:Hello world
# casefold() - 将字符串转换为小写,并且移除大小写区别
string = "Hello World"
print("casefold()示例:", string.casefold()) # 输出:hello world
# center() - 返回一个指定宽度的居中对齐的字符串
string = "Hello"
print("center()示例:", string.center(10, "*")) # 输出:**Hello***
# count() - 返回字符串中指定子串出现的次数
string = "Hello, hello, hello"
print("count()示例:", string.count("hello")) # 输出:3
# encode() - 返回字符串的编码版本
string = "Hello"
print("encode()示例:", string.encode()) # 输出:b'Hello'
# endswith() - 检查字符串是否以指定后缀结束
string = "Hello World"
print("endswith()示例:", string.endswith("World")) # 输出:True
# expandtabs() - 将字符串中的制表符替换为空格,默认制表符大小为 8
string = "Hello\tWorld"
print("expandtabs()示例:", string.expandtabs()) # 输出:Hello World
# find() - 返回指定子串在字符串中第一次出现的位置,如果未找到返回 -1
string = "Hello World"
print("find()示例:", string.find("World")) # 输出:6
输出结果:
capitalize()示例: Hello world
casefold()示例: hello world
center()示例: **Hello***
count()示例: 2
encode()示例: b'Hello'
endswith()示例: True
expandtabs()示例: Hello World
find()示例: 6
那么,关于字符串类型及其操作的函数讲解和示例代码,基本上讲完了,大家可以尝试着跟着代码一起学习,如果后面还有补充的,我将继续为大家分享。
感谢您的关注,我们下一篇文章将继续学习记录python的下一个知识点。