11.字符串

一、列表元组字典集合和字符串的比较

比较项列表元组字典集合字符串
是否可变可变的不可变可变的可变的不可变
是否有序有序的有序的Python3.7之前:无序的,Python3.7之后:有序的无序的有序的
是否可以存储重复元素可以可以key:不可以重复,value:可以重复不可以可以
数据类型任意类型任意类型key:不可变的数据类型,value:任意类型任意类型----

二、字符串

由若干个字符组成的一个序列被称为字符串,其中的字符可以是字母,数字,符号,中文等

注意:字符串属于不可变的数据类型,可以作为字典的key

1.创建

# 1.' '
str1 = '123abc%$#计算机'
print(str1)
​
# 2." "
str2 = "123abc%$#" \
       "计算机"
print(str2)
​
# 3.""" """ 或 ''' '''
str3 = """123abc%$#计算机"""
print(str3)
​
# 注意:三引号的特殊之处:内部的内容可以使用换行,而且可以原样输出
str3 = """123
abc%$#
计算机"""
print(str3)
​
# 4.转义字符
# 语法:\x
"""
因为字符串中可以是数字,字母,符号或中文
​
作用:
    a.可以将一个普通字符转换为特殊字符
    b.可以将一个特殊字符转换为普通字符
"""
# a.
s1 = "\"hello\""
print(s1)
s1 = "'hello'"
print(s1)
s1 = '"hello"'
print(s1)
​
# 练习
dict1 = {'name':'张三','age':10}
print(f"姓名:{dict1['name']}")
print(f'姓名:{dict1["name"]}')
​
# b.
"""
n ----->\n  换行
t ----->\t  制表符【tab键】
r ------>\r  回车
b ------>\b  backsapce
"""
s2 = 'hello\npython'
print(s2)
s2 = 'hello\tpython'
print(s2)
​
# c.\----->\\
s3 = 'aaa\bbb\ccc\ddd\nnn'
print(s3)  # aabb\ccc\ddd
​
s3 = 'aaa\\bbb\\ccc\\ddd\\nnn'
print(s3)   # aaa\bbb\ccc\ddd\nnn
​
# 注意:r"xxx",可以将字符串中的特殊字符进行转义,无需手动转义,常用于路径的表示或者正则表达式中
s3 = r"aaa\bbb\ccc\ddd\nnn"
print(s3)  # aaa\bbb\ccc\ddd\nnn

2.操作

# 字符串的使用和列表的使用相似,都是有序的,都有索引
# 1.字符的访问
str1 = 'ghajkghajk'
print(str1[0])
print(str1[-len(str1)])
​
print(str1[-1])
print(str1[len(str1) - 1])
​
# 2.+:拼接
s1 = 'abc'
s2 = '123'
print(s1 + s2)
​
# 3.*:重复
print("#" * 30)
print(s1 * 3)
​
# 4.in/not in:判断是否存在
print('a' in s1)
print('a' not in s1)
​
# 5.遍历
data = 'hello'
for ch in data:
    print(ch)
​
for i in range(len(data)):
    print(data[i])
​
for i,ch in enumerate(data):
    print(i,ch)

3.系统功能

3.1转换

eval():将str转换为有效的表达式

# 1.eval(str):可以识别一个字符串str中的有效的python语句并执行该语句
# a
s1 = '123'
r1 = eval(s1)
r2 = int(s1)
print(r1,type(r1))
print(r2,type(r2))
​
# b
s1 = '123.34'
r1 = eval(s1)
r2 = float(s1)
print(r1,type(r1))
print(r2,type(r2))
​
# c.
eval("print('哈哈哈哈哈哈')")
​
list1 = [34,65,6,67]
eval('list1.append(88)')
print(list1)
​
# d.
# 练习1:从控制台输入数学表达式,并计算结果
# data = input("请输入数学表达式:")
# print(f"{data}的运算结果为:{eval(data)}")
​
# 练习2:从控制台输入5个数,组成一个列表,求平均值
# numlist = eval(input("请输入5个数字的列表:"))
# print(f"平均值:{sum(numlist) / len(numlist)}")

upper():将小写字母转换为大写

lower():大---》小

swapcase():大---》小 小----》大

capitalize():首单词的首字母大写,其他全部小写,英文句子

title():每个单词的首字母大写,其他全部小写

ord(),chr()

# 2.chr()和ord()
"""
chr(num):获取数字num在ASCII表中对应的字符
ord(ch):获取字符ch在ASCII表中对应的十进制数字
"""
print(chr(97))
print(ord('A'))
print(ord('0'))
​
# 练习:从控制台输入一个小写字母,将其转换为对应的大写字母
ch = input("请输入一个小写字母:")  # e
# 获取小写字母对应的数字
n1 = ord(ch)
print(n1)
# 获取大写字母对应的数字
n2 = n1 - 32
print(n2)
# 获取对应的大写字母
ch1 = chr(n2)
print(ch1)
​
# 整合
ch = input("请输入一个小写字母:")
# 面试题
print(chr(ord(ch) - 32))

3.2查找

find():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1 **

rfind():从右往左进行检索

index():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错

rindex():从右往左进行检索

3.3填充

center(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居中显示

ljust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居左显示,

rjust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居右显示,

zfill(width):原字符串居右显示,剩余的字符默认用0填充

"""
center(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居中显示
​
ljust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居左显示,
​
rjust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居右显示,
​
zfill(width):原字符串居右显示,剩余的字符默认用0填充
"""
​
# 1.center():两端使用指定字符填充,原字符串居中显示
# fillchar可以省略,默认使用空格填充
print("hello".center(20))
# fillchar可以自定义,但是,fillchar必须是一个字符
print("hello".center(20,"*"))
# print("hello".center(20,"*****")) # TypeError: The fill character must be exactly one character long
​
# 2.ljust():右边使用指定字符填充,原字符串居左显示
print("hello".ljust(20))
print("hello".ljust(20,"*"))
​
# 3.rjust():左边使用指定字符填充,原字符串居右显示
print("hello".rjust(20))
print("hello".rjust(20,"*"))
​
# 4.zfill():左边使用字符0填充,原字符串居右显示
print("hello".zfill(20))
print("hello".rjust(20,"0"))

3.4提取

strip():去除一个指定字符串中两端指定的子字符

lstrip():去除一个指定字符串中左边指定的子字符

rstrip():去除一个指定字符串中右边指定的子字符

3.5合并和分割

join():使用指定的子字符串将列表中的元素连接【列表-----》字符串】

split():使用指定的子字符串将原字符串进行分割,得到一个列表 【字符串-----》列表】

3.6替换

replace(old,new):将原字符串中的old替换为new

映射替换:

​ maketrans():生成映射表

​ translate():根据映射表将指定字符串中的指定字符替换为映射表中对应的字符

3.7判断

isalpha():一个字符串非空并字符全部是字母才返回True

isalnum():一个字符串非空并字符是字母或者数字才返回True

isupper()/islower()/istitle():和upper,lower,title有关

isdigit()/isdecimal():一个字符串非空并字符全部是数字才返回True ***

startswith();判断一个字符串是否是以指定自字符串开头【前缀】 ***

endswith():判断一个字符串是否是以指定自字符串结尾【后缀】

3.8编码和解码

encode():编码

decode();解码

"""
【面试题】简述字符串的编码和解码
编码:将字符串类型转换为字节类型,实现方式:bytes()或encode()
解码:将字节类型转换为字符串类型,实现方式:str()或decode()
​
字符串:''   ''   三引号
字节:b''   b""   b三引号
​
常用的编码格式:
    utf-8
    gbk
"""
​
# 1.编码
str1 = "3454jgjgj计算机%¥#"
# a.bytes()
r1 = bytes(str1,encoding="utf-8")   # int()/float()/list()....
print(r1)
print(type(r1))
​
# b.encode()
r2 = str1.encode(encoding="gbk")
print(r2)
print(type(r2))
​
# 2.解码
# a.str()
# 注意:字符串的编解码的格式一定要保持一致,否则无法操作
s1 = str(r1,encoding="utf-8")
print(s1)
print(type(s1))
​
# b.decode()
s2 = r2.decode(encoding="gbk")  # r2.decode("gbk")
print(s2)
print(type(s2))
​
​
# 使用场景:文件读写和爬虫

3.9格式化

占位符

format()

f""

# 1.占位符             ******
"""
%d:可以匹配数字,一般匹配整型【整数】
%f:可以匹配数字,一般匹配浮点型【小数】
%s:可以匹配Python中的一切数据类型
"""
# 语法:"使用占位符设置格式" % (实际的数据)
# 作用:使用实际的数据将占位符占用的位置进行填充
print(13,'abc')
print('年龄:%d,爱好:%s' % (10,'篮球'))
​
# 注意1:实际数据的数量和占位符的数量需要完全一致
# print('年龄:%d,爱好:%s' % (10))  # TypeError: not enough arguments for format string
​
# 注意2:从前往后进行一一匹配,实际数据的类型和占位符的类型要匹配
# print('年龄:%d,爱好:%s' % ('篮球',10)) # TypeError: %d format: a number is required, not str
​
print('年龄:%s,爱好:%s' % (10,'篮球'))
​
# 注意3:%d匹配到浮点数会自动取整,%f匹配到整型会自动转换为浮点型
print('年龄:%d,爱好:%s,体重:%f' % (10.85,'篮球',55))
​
# 注意4:%.nd,n表示整数显示的位数,不够的话在原数字的前面补0
# %.nf,n表示保留小数点后n位   *****
print('年龄:%.5d,爱好:%s,体重:%.2f' % (10,'篮球',55.2463563234))
# print('年龄:%s,爱好:%s,体重:%s' % (10.85,'篮球',55.2463563234))
​
# 2.format()
# 注意1:format和占位符相比,优点:不需要考虑类型的问题
print('年龄:{},爱好:{}'.format(10,'篮球'))
​
# 注意2:format和占位符相比,优点:也可以不需要考虑数量的问题
print('名次:{},年龄:{},爱好:{}'.format(10,10,'篮球'))   # 默认,数量一致
print('名次:{0},年龄:{0},爱好:{0}'.format(10,'篮球'))   # 同一个数据可以重复使用
​
# 注意3:format也可以限制类型,{编号:s},s表示字符串类型,f表示浮点型,d表示整型,
# 默认保留小数点后6位
print('年龄:{0},爱好:{1},体重:{2:f}'.format(10,'篮球',55.6347))
​
# 3.f"",推荐          *******
print(f'年龄:{10},爱好:{"篮球"}')
print(f'年龄:{10},爱好:{"篮球"},体重:{55.6347}')
​
# 练习:
name = input("请输入你的姓名:")
age = input("请输入你的年龄:")
hobby = input("请输入你的爱好:")
print("大家好,我是%s,今年%s岁,爱好%s,还有%d年退休。" % (name,age,hobby,60 - int(age)))
print("大家好,我是{},今年{}岁,爱好{},还有{}年退休。".format(name,age,hobby,60 - int(age)))
print(f"大家好,我是{name},今年{age}岁,爱好{hobby},还有{60 - int(age)}年退休。")

4.综合演示

# 注意:字符串是不可变的数据类型,所以但凡涉及到字符串的更改,都是生成了一个新的字符串,原字符串不受影响
​
# 1.写代码,有如下变量,请按照要求实现每个功能
# a.移除name变量对应值的两边的空格,并输出移除后的内容
"""
strip():去除一个指定字符串中两端指定的子字符
lstrip():去除一个指定字符串中左边指定的子字符
rstrip():去除一个指定字符串中右边指定的子字符
"""
name = "     gouguoQ "
print(name)
# 注意:默认情况下,去除一个字符串两端的空格
a1 = name.strip()
print(a1)
# print(name)
a1 = name.rstrip()
print(a1)
a1 = name.lstrip()
print(a1)
​
# 注意2:也可以去除指定的字符
name = "*****gouguoQ**"
print(name)
a1 = name.strip('*')
print(a1)
a1 = name.rstrip("*")
print(a1)
a1 = name.lstrip("*")
print(a1)
​
​
# b.判断name变量对应的值是否以"go"开头,并输出结果
# c.判断name变量对应的值是否以"Q"结尾,并输出结果
"""
startswith();判断一个字符串是否是以指定自字符串开头【前缀】  ***
endswith():判断一个字符串是否是以指定自字符串结尾【后缀】  
"""
name = "gouguoQ "
b = name.startswith('go')
print(b)
c = name.endswith("Q")
print(c)
​
# d.将name变量对应的值中的"o",替换为"p",并输出结果
"""
replace(old,new):将原字符串中的old替换为new           ******  
映射替换:
    maketrans():生成映射表【密码本】
    translate():根据映射表将指定字符串中的指定字符替换为映射表中对应的字符
"""
"""
【面试题】
name = "gouguoQoabco123"
name.replace('o','p')
print(name)   # gouguoQoabco123
"""
# 注意1:默认会将指定字符全部替换
name = "gouguoQoabco123"
d1 = name.replace('o','p')
print(d1)
​
# 注意2:从左往右进行计数,可以控制替换的次数
d1 = name.replace('o','p',2)
print(d1)
​
# 注意3:可以通过映射替换操作,映射替换:简单的加密
str1 = "561735656460415"
table = str.maketrans('012345','abcdef')   # 此处两个字符串的长度必须相同
print(table)  # {48: 97, 49: 98, 50: 99, 51: 100, 52: 101, 53: 102}
d2 = str1.translate(table)
print(d2)  # f6b7df6f6e6aebf
​
t = str.maketrans('o','p')
d3 = name.translate(t)
print(d3)
​
# e.将name变量对应的值根据"o"分割,并输出结果
# n.利用下划线将列表li = ['gou', 'guo', 'qi']的每一个元素拼接成字符串gou_guo_qi
"""
join():使用指定的子字符串将列表中的元素连接【列表-----》字符串】      
split():使用指定的子字符串将原字符串进行分割,得到一个列表  【字符串-----》列表】
"""
# 注意1:默认全部分割,得到一个列表
name = "gouguoQoabco123"
e1 = name.split('o')
print(e1)   # ['g', 'ugu', 'Q', 'abc', '123']
​
# 注意2:可以指定分割的次数
name = "gouguoQoabco123"
e1 = name.split('o',2)
print(e1)
​
# 注意3:只有列表中的元素是字符串的前提下,才能进行拼接
li = ['gou', 'guo', 'qi']
n = "_".join(li)
print(n)
​
# li1 = [34,5,67]
# n1 = '*'.join(li1)  # TypeError: sequence item 0: expected str instance, int found
# print(n1)
​
# g.将name变量对应的值变大写,并输出结果
# h.将name变量对应的值变成小写,并输出结果
"""
upper():小----》大                 ******
lower():大---》小                  ******
swapcase():大---》小               ******
capitalize():首单词的首字母大写,其他全部小写,英文句子    ******
title():每个单词的首字母大写,其他全部小写    ******
"""
name = 'tHis is A tExt'
print(name.upper())
print(name.lower())
print(name.swapcase())
# 【面试题】
print(name.capitalize())  # This is a text
print(name.title())  # This Is A Text
​
# i.请输出name变量对应的值的第二个字符
name = "gouguoQoabco123"
print(name[1])
​
# j.请输出name变量对应的值的前三个字符
print(name[:3])
# k.请输出name变量对应值的后2个字符
print(name[-2:])
print(name[len(name) - 2:])
# m.获取子序列,仅不包含最后一个字符,如:woaini则获取woain  root则获取roo
print(name[:-1])
​
# l.请输出name变量中的值"Q"的索引的位置
"""
find():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1             **
rfind():从右往左进行检索
index():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错       
rindex():从右往左进行检索
"""
name = "gQouguoQoabco12Q3"
​
# 注意1:如果子字符串存在的前提下,index和find从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置
print(name.index("Q"))
print(name.find("Q"))
​
# 注意2:如果子字符串不存在的情况下,index直接报错,find返回-1,建议使用find
# print(name.index("x"))  # ValueError: substring not found
print(name.find("x"))     # -1
​
# 注意3:默认全局查找,但是可以设置查找范围,设置开始索引和结束索引,遵循包头不包尾
name = "gQouguoQoabco12Q3"
print(name.index("Q",1,6))   # 1
print(name.find("Q",1,6))    # 1
​
# print(name.index("Q",2,7))  #ValueError: substring not found
print(name.find("Q",2,7))    # -1
​
# 注意4:rindex和rfind表示从右往左进行检索,返回的结果仍然是子字符串在原字符串中的索引
print(name.rindex("Q"))
print(name.rfind("Q"))

5.练习

# 2.已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下
a = "aAsmr3idd4bgs7Dlsf9eAF"
​
# a.请将a字符串的大写改为小写,小写改为大写
r = a.swapcase()
print(r)
​
# b.请将a字符串的数字取出,并输出成一个新的字符串
# 方式一
r1 = ""
for ch in a:
    if ch in [str(i) for i in range(10)]:
        r1 += ch
print(r1)
​
# 方式二
r1 = ""
for ch in a:
    if ch.isdigit():
        r1 += ch
print(r1)
​
r1 = ""
for ch in a:
    if ch.isdecimal():
        r1 += ch
print(r1)
​
# c.请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。
# 例 {'a':4,'b':2}
c = a.lower()
dict1 = {}
for ch in c:
    dict1[ch] = c.count(ch)
print(dict1)
​
# d.输出a字符串出现频率最高的字母
dict1 = {}
for ch in a:
    dict1[ch] = a.count(ch)
print(dict1)
max_value = max(dict1.values())
for key,value in dict1.items():
    if value == max_value:
        print(key)
​
# e.请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输出False
a = 'abc24y5qgohg'
substr = 'boy'
count  = 0
for ch in substr:
    if ch in a:
        count += 1
if count == len(substr):
    print(True)
else:
    print(False)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiayi_init_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值