目录
1、在Python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列
一、基本介绍
1、在Python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列
1)Unicode码是一种字符编码
2)Unicode编码能够表示的数量为65536个字符
3)Unicode是国际组织指定的可以容纳世界上所有文字和符号的字符编码方案
4)参考:ord()返回单个字符对应的Unicode编码值
2、字符串字面值有三种写法
1)单引号:' 允许包含有"双"引号'
2)双引号:"允许嵌入'单'引号"
3)三重引号:'''三重单引号''',"""三重双引号""",使用三重引号的字符串可以跨越多行——其中所有的空白字符都将包含在该字符串字面值中
3、字符串是字符的容器,一个字符串可以存放多个字符
比如"hi-韩顺平教育",示意图
二、字符串支持索引
1、使用语法
字符串名[索引]
2、举例说明
str_a="red-green"
比如:要取出strr_a字符串的第3个值/元素"d",则通过str_a[2]就可以访问到
提示:索引是从0开始计算的,取出的单个字符,类型仍然是字符串
3、代码演示
str_a = "red-green"
print("str_a的第三个字符是:", str_a[2], "类型是:", type(str_a[2])) # d str
三、字符串的遍历
1、什么是字符串的遍历
简单的说,就是将字符串的每个元素依次取出,进行处理的操作,就是遍历/迭代
str_b="hi-韩顺平教育"
2、实例:使用while和for循环,对字符串进行遍历输出
# 使用 while和 for 遍历字符串
str_b="hi-韩顺平教育"
# while 循环遍历
index = 0
while index<len(str_b):
print(f"第 {index+1} 个元素是:{str_b[index]}")
index+=1
# print("=====================")
# 上面的分隔符可以这样写
print("="*30)
# for 循环遍历
for ele in str_b:
print(ele)
四、注意事项和使用细节
1、字符串索引必须在指定范围内使用,否则报IndexError: string index out of range,比如str_d="hi-韩顺平教育" ,有效下标为0-7。索引也可以从尾部开始,最后一个元素的索引为-1,往前一位为-2,以此类推
2、字符串是不可变序列,不能修改,看下面代码
str="hi-韩顺平教育"
# 通过索引可以访问指定元素
print(str[3])
# 不能修改元素
# str[3]="李"
3、在Python中,字符串长度没有固定的限制,取决于计算机内存大小
五、字符串常用操作
1、字符串常用操作
2)常用操作一览
2、演示字符串常用操作
1)len(str):字符串的长度,也就是包含多少个字符
# len(str):字符串的长度,也就是包含多少个字符
str_names="jack tom mary hsp nono tom"
print(f"{str_names} 有 {len(str_names)} 个字符") # 26
2)str.replace(old,new,[count]):返回字符串的副本,其中出现的所有子字符串old都将被替换成new,如果给出了可选参数count,则只替换前count次出现
# str.replace(old,new,[count]):返回字符串的副本,其中出现的所有子字符串old都将被替换成new,
# 如果给出了可选参数count,则只替换前count次出现
# 返回字符串的副本,表示原来的字符串不变,而是返回一个新的字符串
# 需求:将"jack"替换成,只替换一个
str_names_new=str_names.replace("jack","杰克",1)
print("str_names_new:",str_names_new) # 杰克 tom mary hsp nono tom
print("str_names:",str_names) # jack tom mary hsp nono tom
3)str.split(sep=None,maxsplit=-1):返回一个由字符串内单词组成的列表,使用sep作为分隔字符串。如果给出了maxsplit,则最多进行maxsplit次拆分(因此,列表最多会有maxsplit+1个元素)。如果maxsplit未指定或为-1,则不限制拆分次数(进行所有可能的拆分)
# str.split(sep=None,maxsplit=-1):返回一个由字符串内单词组成的列表,使用sep作为分隔字符串。
# 如果给出了maxsplit,则最多进行maxsplit次拆分(因此,列表最多会有maxsplit+1个元素)。
# 如果maxsplit未指定或为-1,则不限制拆分次数(进行所有可能的拆分)
# 需求:对ste_names按照" "进行分割
str_names_split=str_names.split(" ")
print(f"str_names_split 内容是 {str_names_split} 类型是 {type(str_names_split)}")
# ['jack', 'tom', 'mary', 'hsp', 'nono', 'tom'] 类型是 <class 'list'>
print(f"str_names 内容是 {str_names}") # jack tom mary hsp nono tom
4)str.count(sub):统计指定子字符串在字符串中出现的次数
# str.count(sub):统计指定子字符串在字符串中出现的次数
# 统计tom在字符串出现了几次
print("tom在字符串出现的次数为:",str_names.count("tom")) # 2
5)str.index(sub):从字符串中找到指定子字符串第一个匹配项的索引位置
# str.index(sub):从字符串中找到指定子字符串第一个匹配项的索引位置
print(f"tom出现的索引为:",str_names.index("tom")) # 5
6)str.strip([chars]):返回原字符串的副本,移除其中的前导和末尾字符。chars为指定要移除字符的字符串。这个方法通常可以用于除去前后空格,或者去掉指定的某些字符
# 需求:去掉字符的前后空格
str_names_strip=str_names.strip(" ")
print("str_names_strip:",str_names_strip) # jack tom mary hsp nono tom
print("123t123om321".strip("132")) # t123om
7)str.lower():返回字符串小写的副本,不影响原来的字符
# str.lower():返回字符串小写的副本,不影响原来的字符
# 需求:将字符串字母全部改成小写
str_names="hspHSP"
str_names_lower=str_names.lower()
print("str_names_lower:",str_names_lower) # hsphsp
print("str_names:",str_names) # hspHSP
8)str.upper():返回字符串大写的副本,不影响原来的字符
# str.upper():返回字符串大写的副本,不影响原来的字符
# 需求:将字符串字母全部改成大写
str_names_upper=str_names.upper()
print("str_names_upper:",str_names_upper) # HSPHSP
print("str_names:",str_names) # hspHSP
六、字符串的比较
1、字符串比较
1)运算符:>,>=,<,<=,==,!=
2)比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
3)比较原理:两个字符进行比较时,比较的是其ordinal value(原始值/码值),调用内置函数ord()可以得到指定字符的ordinal value。与内置函数ord()对应的是内置函数chr(),调用内置函数chr()时指定ordinal value,可以得到其对应的字符
2、字符编码-简单示意图
# ord() 由字符->编码
print(ord('1')) # 49
print(ord('2')) # 50
print(ord('a')) # 97
print(ord('b')) # 98
print(ord('韩')) # 38889
print("----------------")
# chr() 由编码->字符
print(chr(38889)) # 韩
print(chr(97)) # a
print(chr(49)) # 1
3、字符串的比较-实例
# 字符串比较
print("tom">"hsp") # T
print("tom">"to") # T
print("tom">"tomcat") # F
print("tom"<"老韩") # T
print("tom">"tom") # F
print("tom"<="tom") # T
七、练习
"""
统计一共有多少个人名
思路分析:
1、使用split方法进行分割
2、然后统计有多少人名即可
"""
str_names="tom jack mary nono smith hsp"
str_names_list=str_names.split(" ")
print(f"一共有 {len(str_names_list)} 人名") # 6
# 如果有"hsp"则替换成"老韩"
str_names_re=str_names.replace("hsp","老韩")
print(f"替换后的结果是:{str_names_re}")
# 如果人名是英文,则把首字母改成大写
"""
思路分析:
"tom jack mary nono smith hsp 张三" -> "Tom Jack Mary Nono Smith Hsp 张三"
1、定义字符串str_names_upper来保存新的结果
2、遍历str_names_list 列表,如果人名是英文名,则将首字母改成大写str.capitalize
3、拼接到str_names_upper即可
"""
str_names_upper=""
for ele in str_names_list:
str_names_upper+=ele.capitalize()+" "
# 去掉两边的" "
str_names_upper=str_names_upper.strip(" ")
print(f"如果人名是英文名,则将首字母改成大写 处理结果为:{str_names_upper}")