初识字符串
字符串的认识
首先,我们先认识下什么是字符串:
# 定义字符串
t_str1 = "Hello World"
t_str2 = "asdfghh"
print(t_str1) # Hello World
print(t_str2) # asdfghh
字符串的介绍
- 字符串就是一串字符,是编程语言汇总表示文本的数据类型;
- 在Python中可以使用一对双引号或者一对单引号定义一个字符串;
- 字符串内部如果需要使用",可以使用'定义字符串;同理,单引号也是;除此之外,也可以用\转译单引号双引号;
- 字符串的索引从0开始,可以用索引获取一个字符串的指定位置的字符;
- 还可以用for遍历字符串中的每一个字符。
字符串的定义语法
变量名 = "一串字符"
eg:
t_str1 = "Hello World"
t_str2 = "asdfgh"
t_str3 = '他说:"你好呀!"'
字符串的操作函数
查看字符串操作函数
在ipython交互式下,先定义一个空字符串,然后输入 空字符. 按下tab键,即可查看;
In [1]: t_str = ""
In [2]: t_str.
t_str.capitalize t_str.isidentifier t_str.rindex
t_str.casefold t_str.islower t_str.rjust
t_str.center t_str.isnumeric t_str.rpartition
t_str.count t_str.isprintable t_str.rsplit
t_str.encode t_str.isspace t_str.rstrip
t_str.endswith t_str.istitle t_str.split
t_str.expandtabs t_str.isupper t_str.splitlines
t_str.find t_str.join t_str.startswith
t_str.format t_str.ljust t_str.strip
t_str.format_map t_str.lower t_str.swapcase
t_str.index t_str.lstrip t_str.title
t_str.isalnum t_str.maketrans t_str.translate
t_str.isalpha t_str.partition t_str.upper
t_str.isdecimal t_str.replace t_str.zfill
t_str.isdigit t_str.rfind
字符串所有的操作函数我们可以看上面。
字符串操作函数分类
1.判断类型
方法 | 说明 |
---|---|
string.isspace() | 如果string只包含空格,则返回True |
string.isalnum() | 如果string至少包含一个字符且所有字符都是字母或者数字则返回True |
string.isalpha() | 如果string至少有一个字符并且所有字符都是字母则返回True |
string.isdecimal() | 如果string只包含数字则返回True,全角数字 |
string.isdigit() | 如果string只包含数字则返回True,全角数字,(1),\u00b2 |
string.isnumeric() | 如果string只包含数字则返回True,全角数字,(1),\u00b2,汉字数字 |
string.istitle() | 如果string是标题化的(每个单词的首字母大写)则返回True |
string.islower() | 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,True |
string.isupper | 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,True |
2.查找和替换
方法 | 说明 |
---|---|
string.startswitj(str) | 检查字符串是否以str开头,是则返回True |
string.endswith(str) | 检查字符串是否以str结尾,是则返回True |
string.find(str,start=0,end=len(string)) | 检查str是否包含在string中,如果start和end指定范围,则检查是否包含在指定范围内,如果是则返回开始的索引值,否则返回-1 |
string.rfind(str,start=0,end=len(string)) | 类似于find()函数,不过是从右边开始查找 |
string.index(str,start=0,end=len(string)) | 和find()方法类似,只不过如果str不再string中会报错 |
string.rindex(str,start=0,end=len(string)) | 类似于index(),不过是从右边开始 |
string.replace(oldstr,newstr,num=string.count(old)) | 把string中的oldstr替换成newstr,如果num指定,则替换不超过num次 |
3.大小写与转换
方法 | 说明 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.title() | 把字符串的每个单词首字母大写 |
string.lower() | 转换string中的所有大写字符转换为小写 |
string.upper() | 转换string中的所有小写字母转换为大写 |
string.swapcase() | 翻转string中的大小写 |
4.文本对齐
方法 | 说明 |
---|---|
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度width的新字符 |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度width的新字符 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度width的新字符 |
5.去除空白字符
方法 | 说明 |
---|---|
string.lstrip() | 截掉string左边(开始)的空白字符 |
string.rstrip() | 截掉string右边(末尾)的空白字符 |
string.strip() | 截掉string左右两边的空白字符 |
6.拆分和连接
方法 | 说明 |
---|---|
string.partition(str) | 把字符串string分成一个3元素的元组(str前面,str,str后面) |
string.rpartition(str) | 类似于partition()函数,不过是从右边开始查找 |
string.split(str="".num) | 以str为分隔符切片string,如果num有指定值,则仅分隔num+1个子字符串,str默认包含'\r','\t','\n'和空格 |
string.splitlines() | 按照行('\r','\t','\n')分隔,返回一个包含各行作为元素的列表 |
string.join(seq) | 以string作为分隔符,将seq中的所有元素(的字符串表示)合并为一个新的字符串 |
字符串操作实操
字符串统计操作
t_str = "hello world hello python"
# 1.统计字符串长度
print(len(t_str)) # 24
# 2.统计某一个子字符串出现的次数
print(t_str.count("hel")) # 2
print(t_str.count("abc")) # 0
# 3.某一个子字符串出现的位置
print(t_str.index("llo")) # 2
# 如果子字符串不存在,会报错
# print(t_str.index("abc"))
判断实操
示例1
t_str = " \t\n"
print(t_str.isspace()) # True
示例2
# 判断字符串中是否只包含数字
str1 = "1"
print(str1)
print(str1.isdecimal())
print(str1.isdigit())
print(str1.isnumeric())
示例3
# 判断字符串中是否只包含数字
str2 = "1.1"
print(str2.isdecimal())
print(str2.isdigit())
print(str2.isnumeric())
# False
# False
# False
由此可见,这几种函数都不能判断小数
示例4
str3 = "(1)"
print(str3)
print(str3.isdecimal())
print(str3.isdigit())
print(str3.isnumeric())
# (1)
# False
# True
# True
提一下,本来结果应该是如上的,但可能是因为自己打的括号不对的原因,输出全是False
示例5
unicode 字符串
str4 = "\u00b2"
print(str4)
print(str4.isdecimal())
print(str4.isdigit())
print(str4.isnumeric())
# ²
# False
# True
# True
示例6
str5 = "一百"
print(str5)
print(str5.isdecimal())
print(str5.isdigit())
print(str5.isnumeric())
# 一百
# False
# False
# True
字符串的查找与替换实操
t_str = "hello world"
print(t_str.startswith("hel")) # True
print(t_str.startswith("Hel")) # False
print(t_str.endswith("ld")) # True
# index也可以用来查找字符串,但index指定的字符串如果不存在,会报错;find不会报错,只会返回-1
print(t_str.find("llo")) # 2
print(t_str.find("abc")) # -1
# replace方法执行完成后,会返回一个新的字符串,不改变原来的字符串
new_str = t_str.replace("world", "python")
print(new_str) # hello python
print(t_str) # hello world
文本对齐
文本居中对齐默认英文空格填充
注意,如果没有指定填充内容,文本默认以英文空格进行填充
# 要求,顺序并且居中对齐输出以下内容
poem = ["早春呈水部张十八员外", "韩愈", "天街小雨润如酥", "草色遥看近却无", "最是一年春好处", "绝胜烟柳满皇都"]
for poem_str in poem:
print("|%s|" % poem_str.center(10))
# 输出结果
"""
| 早春 |
| 韩愈 |
| 天街小雨润如酥 |
| 草色遥看近却无 |
| 最是一年春好处 |
| 绝胜烟柳满皇都 |
"""
文本居中对齐中文空格填充
注意,中文空格要切换输入法到全角
poem = ["早春", "韩愈", "天街小雨润如酥", "草色遥看近却无", "最是一年春好处", "绝胜烟柳满皇都"]
for poem_str in poem:
print("|%s|" % poem_str.center(10, " "))
# 输出结果
"""
| 早春 |
| 韩愈 |
| 天街小雨润如酥 |
| 草色遥看近却无 |
| 最是一年春好处 |
| 绝胜烟柳满皇都 |
"""
文本左对齐
注意,如果是中文要对齐,记得是圆角,不再赘述
poem = ["早春", "韩愈", "天街小雨润如酥",
"草色遥看近却无", "最是一年春好处", "绝胜烟柳满皇都"]
for poem_str in poem:
print("|%s|" % poem_str.ljust(10, " "))
"""
|早春 |
|韩愈 |
|天街小雨润如酥 |
|草色遥看近却无 |
|最是一年春好处 |
|绝胜烟柳满皇都 |
"""
文本右对齐
只需将print("|%s|" % poem_str.ljust(10, " ")) 换成rjust即可,不演示。
strip 去除空白字符
# 要求,顺序并且居中对齐输出以下内容
poem = ["\t\n早春", "韩愈", "天街小雨润如酥", "草色遥看近却无\t\n",
"最是一年春好处", "绝胜烟柳满皇都"]
for poem_str in poem:
# 先使用strip方法去除字符串中的空白字符
# 再使用center方法居中显示文本
print("|%s|" % poem_str.strip().center(10, " "))
"""
| 早春 |
| 韩愈 |
| 天街小雨润如酥 |
| 草色遥看近却无 |
| 最是一年春好处 |
| 绝胜烟柳满皇都 |
"""
字符串拆分和拼接 split join
# 要求,将字符串中的空白字符全部去除,再使用" "作为分隔符,拼接成一个整齐的字符串
poem_str = "\t\n早春\t韩愈\t\n天街小雨润如酥\t草色遥看近却无\t\n最是一年春好处\t绝胜烟柳满皇都\t\n"
print(poem_str)
# 1.拆分字符串
poem_list = poem_str.split()
print(poem_list)
# 2.合并字符串
result = " ".join(poem_list)
print(result)
"""
早春 韩愈
天街小雨润如酥 草色遥看近却无
最是一年春好处 绝胜烟柳满皇都
['早春', '韩愈', '天街小雨润如酥', '草色遥看近却无', '最是一年春好处', '绝胜烟柳满皇都']
早春 韩愈 天街小雨润如酥 草色遥看近却无 最是一年春好处 绝胜烟柳满皇都
"""
字符串的切片
切片语法和注意
切片方法适用于 字符串,列表,元组
- 切片使用索引值来限定范围,从一个大的字符串中切出小的字符串;
- 列表和元组都是有序的集合,都能够通过索引值获取到对应的数据;
- 字典是一个无序的集合,使用用键值对保存数据;
比如我们对于一个"python"字符串,
顺序是0 1 2 3 4 5;倒序是-1 -2 ...;
切片语法
字符串[开始索引:结束索引:步长]
注意:
- 指定的区间属于左闭右开型[开始索引,结束索引) --> 开始索引 >= 范围 < 结束索引;即从其实位开始,到结束位的前一位结束(不包含结束位本身)。
- 从头开始,开始索引数字可以省略,冒号不能省略;
- 到末尾结束,结束索引 数字可以省略,冒号不能省略;
- 步长为1,如果连续切片,数字和冒号都可以省略。
切片实操
现在有一个num_str="0123456789",请完成以下操作:
1.截取从 2-5 位置的字符串
2.截取从2-末尾的字符串
3.截取从 开始-5 位置的字符串
4.截取完整的字符串
5.从开始位置,每隔一个字符截取字符串
6.从索引1开始,没隔一个取一个
7.截取从 2~ 末尾-1 的字符串
8.截取字符串末尾两个字符
9.字符串的逆序
答案:
1.num[2:6]
2.num[2:]
3.num[0:6]
3.num[:6]
4.num[:]
5.num[::2]
6.num[1::2]
7.num[2:-1]
8.num[-2:]
9.num[-1::-1]
9.num[::-1]
num[0::-1]的结果:"0"