python之字符串

字符串部分

1.字符串定义:

一对单引号
一对双引号
三对单引号
三对双引号

案例展示

 字符串的定义方式
#单引号
str='hello word'
#打印字段类型
print(type(str))
#双引号
str1="hello string"
print(type(str1))
#三对单引号
str2='''hello Word'''
print(str2)
str3="""hello word2"""
print(str3)
#一对引号和三对引号的区别
#在一对引号内部进行手动换行,无法修改其字符串的格式,必须使用转义字符\n \t等
print("--------------------------------------------------------------")
str4='hello' \
     'word'
print(str4)
print("---------333-------------")
str5='hello\n'\
'pxj'
print(str5)
#在三对引号内进行手动换行,可以在打印时输出换行格式,无需使用转义字符
str6='''
hello
pxj
'''
print(str6)
#三对引号可以作为多行注释
str7 = """
弃我去者昨日之日不可留
乱我心者今日之日多烦忧
长风万里送秋雁
对此可以酣高楼
......
"""
print(str7)
#需求 : 输出  I'm Jake.
#如果字符串被双引号包裹,则内部可以单独使用单引号
print("I'm jake")
#需求:输出"鲁迅说:I'm a 周树人"
print('''"孔子说:I'm a 文豪"''')
运行结果:
    C:\Python\python.exe F:/Python_heima/com/pxj/ccj/string1/String1.py
<class 'str'>
<class 'str'>
hello Word
hello word2
--------------------------------------------------------------
helloword
---------333-------------
hello
pxj
hello
pxj
弃我去者昨日之日不可留
乱我心者今日之日多烦忧
长风万里送秋雁
对此可以酣高楼
......
I'm jake
"孔子说:I'm a 文豪"
Process finished with exit code 0
input输入
name=input("请输入姓名:")
print(f"输入的名字是:{name}")
print("输入的姓名是:%s" %name )
运行结果:
C:\Python\python.exe F:/Python_heima/com/pxj/ccj/string1/InputDemo.py
请输入姓名:pxj
输入的名字是:pxj
输入的姓名是:pxj
Process finished with exit code 0

字符串索引

索引就是系统给字符串中每一个元素的编号

正数索引:从0开始,从左至右依次递增
负数索引:从-1来时,从右至左依次递减
使用索引可以获取字符串中的元素

字符串[元素的索引]

案例

什么是字符串索引?
就是保存字符串时,将所有字符依次存入字符串所在空间,并且按照顺序将元素依次存放, 为了方便存取数据,我们讲元素进行编号,从0开始依次递增
通过下标索引,可以获取元素,或者进行切片等操作

str='welcome here'
print(str[4])
print(str[-8])
'''
w  e  l  c  o m   e  
#正数索引
0  1  2  3  4  5  6
#负数索引
-7 -6 -5 -4 -3 -2 -1
'''
# 结论:字符串中的索引,正数索引从0开始,从左至右依次递增, 负数索引,从-1开始从右至左依次递减
str[1:4:1]
str1=str[1:4:1]
print(str1)
# 字符串切片以及其他容器类型的切片操作,都会重新生成一个新的数据序列,不会对原有数据序列产生影响
print(str)
# 切片逻辑
# 起始位置: 字符串切片的起点(包含)
# 结束位置:字符串切片的终点(不包含)
# 在开发中绝大多数范围区间是左闭右开区间,其余内容单独记忆(例如 randint是一个闭区间)
# 步长:步长就是每一次查找数据的间隔(相邻两个索引的差值就是步长)
str2 = '我喜欢读书,喜欢看日落'
print(str2[2:7:1])
# 如果步长为1 可以被省略
# 步长省略后,:也可以省略
print(str2[2:7])
# 起始位置也可以省略
# 如果起始位置省略,步长为正数,则起始位置为字符串开始
print(str2[:7:1])
# 如果起始位置省略,步长为负数,则起始位置为字符串末尾
print(str2[:7:-1])
print(str2[2:7:-1]) # 空字符串
# 结论: 如果步长是负数,开始位置要在结束位置右侧,否则没有数据
# 结束位置可以省略
# 如果结束位置省略,步长为正数,则结束位置为字符串末尾
print(str2[8::1])  #
# 下方表达式和上一行是否含义相同? 不相同,因为结束位置写-1不包含结束位置
print(str2[8:-1:1])
# 如果结束位置省略,步长为负数,则结束位置为字符串开始
print(str2[8::-1])  #
# 如果结束位置写0  含义也不相同
print(str2[8:0:-1])  #
print(str2[4: 11: 2])  #
# 在使用字符串切片进行非1步长书写时,要注意起始位置和结束位置,并且查看间隔
# Python中优雅的字符串反转方式
print(str2[::-1])  # 
# python中复制数据序列的方法
str3 = str2[:]
print(str3)  #
字符串查询

index:查找字符串中子字符串所在位置i,如果有该字符串,查询其从左至右第一次出现的位置的正数索引,否则报错
find:查找字符串中子字符串所在位置i,如果有该字符串,查询其从左至右第一次出现的位置的正数索引,否则返回-1
rindex:查找字符串中子字符串所在位置i,如果有该字符串,查询其从右至左第一次出现的位置的正数索引,否则报错
rfind:查找字符串中子字符串所在位置i,如果有该字符串,查询其从右至左第一次出现的位置的正数索引,否则返回-1
count:查询子字符串在指定字符串中出现的次数。
str1 = ‘hello python’

# index
# 需求:查找p所在的索引位置
# 格式: 字符串.index(self(不用传值), sub(子字符串), start(起始位置), end(结束位置))
print(str1.index('p'))  # 6
print(str1.index('o'))  # 4
# 查询指定范围内的字符串,虽然指定了范围,但是计算索引是从左至右依次递增的
print(str1.index('o', 5, 12))  # 10
# ValueError: substring not found
# 结论:找不到对应的子字符串,则会报错,如果能够查找到数据返回当前子字符串的正数索引
# 指定查找范围是左闭右开区间
# print(str1.index('o', 5, 10))  # 10
print(str1.index('o', 10, 12))  # 10
字符串替换
str4="python hello"
print(str4.replace('o','$'))
# 指定替换次数
# 如果不指定替换次数,默认将所有的制定字符全部替换
print(str4.replace('o', '$', 1))  # hell$ python
# 如果指定的替换次数大于出现的次数,则也是只替换出现的次数
print(str4.replace('o', '$', 10))  # hell$ python
字符串的拆分和合并
split:字符串按照指定分隔符进行拆分

拆分后得到的结果是有拆分后的字符串组成的一个列表
拆分后,所有的分隔符消失
join:将字符串序列(容器类型中所有元素均为字符串)按照指定分隔符进行合并
# split 字符串拆分
str1 = 'I love Python and java and c and lixiaolong'
# 需求: 将所有的单词按照空格为分隔符进行拆分,拆分为多个字符串
# split 会按照指定分隔符进行拆分,拆分完成后 会将所有的拆分后的结果以字符串形式保存到列表中
# split(self(不用传值), sep(分隔符), maxsplit(最大分割次数))
print(str1.split())
# 指定最大分割次数
# 可以把split看成一把刀,字符串看成一条线,砍一刀分成两份,砍两刀分成3分以此类推
print(str1.split(" ",3))
# 需求:按照以'a'为分割符进行拆分,将str1 最大拆分次数60次
# 使用谁作为分隔符,则拆分后该分隔符消失,
# 最大拆分次数如果超过可以拆分的上限,则保持拆分上线即可,不会报错
print(str1.split('a', 60))  # ['I love Python ', 'nd j', 'v', ' ', 'nd c ', 'nd lixi', 'olong']
# join 字符串合并
str2=str1.split()
st3=[1,2,3,4,'abc']
# 进行join合并时,要注意可迭代类型中全部元素都要是字符串类型,否则无法合并
print(str2.join(st3))
list1 = str1.split()
list2 = [1,2,3,4,'abc']
print(list1)
# 将list1  按照指定分隔符❤  合并为一个字符串
# 格式:分隔符.join(iterable(可迭代类型))
print('❤'.join(list1))  # I❤love❤Python❤and❤java❤and❤c❤and❤lixiaolong
# 进行join合并时,要注意可迭代类型中全部元素都要是字符串类型,否则无法合并
print('❤'.join(list2))  # TypeError: sequence item 0: expected str instance, int found
字符串转换

capitalize:将字符串首字母大写,其余字母小写
title: 将字符串中每个单词首字母大写(任何非字母字符都可以作为单词分隔符)
upper:将字符全部变为大写
lower:将字符全部变为小写
字符串中各种大小写转换
str1 = ‘hello woRld aNd Python’
capitalize 将字符串的第一个字母大写,同时讲其余全部字母小写, 对数字和汉字等不做处理
print(str1.capitalize()) # Hello world and python
title 将所有的单词首字母大写,其余字母变为小写
在Python中怎样对单词进行辨别, 非字母字符都可以作为分隔符


str2 = 'hello中国python'
print(str1.title())  # Hello World And Python
print(str2.title())  # Hello中国Python
# upper()将数据全部变为大写
print(str1.upper())  # HELLO WORLD AND PYTHON
# lower()将字符全部变为小写
print(str1.lower())  # hello world and python
字符串两侧指定字符删除
strip:删除字符串两侧的指定字符
rstrip:删除字符串右侧的制定字符
lstrip:删除字符串左侧的指定字符
# strip 去重字符串左右两侧指定字符
str1 = '    hello  python\t \n     '
# strip中如果不传参数,则去除字符串左右两侧的空白(包括空格,换行,制表位等)
print(str1.strip())  # hello  python
# 格式:字符串.strip(self(不传值), chars(可以传一个字符或多个字符))
str2 = '$$$hello Python$$$'
# 删除字符串左右两侧的$符号
# 删除一个指定字符
print(str2.strip('$'))  # hello Python
# 删除多个指定字符
str3 = '13214123123hello Python12314123123123'
print(str3.strip('12'))  # 314123123hello Python12314123123123
print(str3.strip('123'))  # 4123123hello Python12314
print(str3.strip('4231'))  # hello Python
# 结论:如果在strip中填写多个字符,等号左右两侧出现的字符如果在传入的字符串中,则删除,否则保留
# 传入多个字符时,和传入的顺序没有任何关系,只要是传入的字符就不能出现在指定字符串左右两侧,直到出现不属于其内容的字符删除结束
# rstrip 删除字符串右侧指定的字符
print(str3.rstrip('1234'))
# lstrip 删除字符串左侧指定的字符
print(str3.lstrip('1234'))
# TypeError: lstrip arg must be None or str
# strip, lstrip, rstrip 只能接收str类型参数或者None
# print(str3.lstrip(1234))
字符串对齐

rjust:右对齐
ljust:左对齐
cneter: 居中对齐
str1 = ‘python’
rjust 右对齐
字符在右侧,不足位置用空格补齐
如果不指定填充字符,则自动用空格补齐
print(str1.rjust(10)) # python
格式:字符串.rjust(self(不用传值), width(字符宽度), fillchar(填充字符))
指定填充字符 为$
print(str1.rjust(10, 'KaTeX parse error: Expected 'EOF', got '#' at position 6: ')) #̲$KaTeX parse error: Expected 'EOF', got '#' at position 64: …r1.ljust(10)) #̲ python print(s…$$
center 居中对齐
格式: center(self(不用传值), width(字符宽度), fillchar(填充字符))
print(str1.center(10)) # python
print(str1.center(10, ‘*’)) # python

字符串判断
所有的字符串判断结果都是布尔型数据
isalnum:判断是否都为字母或数字
isalpha:判断是否都为字母
isdigit:判断是否都为数字
isspace:判断是否都为空格
endswith:是否以。。结尾
startswith:是否以。。开头

# 判断字符串内的数据是否符合某种规则

str1 = 'hello itcast'
# startswith 判断是否以...开头
# 需求:判断当前字符串是否以he开头
# 结果是布尔值
print(str1.startswith('he'))  # True
print(str1.startswith('al'))  # False
# 指定范围  左闭右开区间
print(str1.startswith('he', 6, 12))  # False
print(str1.startswith('it', 6, 12))  # True

# endswith 判断是否以...结尾
print(str1.endswith('st'))  # True
print(str1.endswith('al'))  # False
# 指定范围的方式与startswith一致,不在赘述

# is 判断
# isalnum 判断是否全部为数字或字母  不能有空格
print(str1.isalnum())  # False
# isspace  判断是否全部为空格
str2 = ' '
print(str2.isspace())  # True
# isnumeric  isdecimal isdigit  都是判断是否为数字的
str3 = '1234'
print(str3.isnumeric())  # True
print(str3.isdecimal())  # True
print(str3.isdigit())  # True
# 判断中文数字
str4 = '123四肆④亖零〇'
print(str4.isnumeric())  # True  这个方法可以判断中文数字和罗马数字和阿拉伯数字
print(str4.isdecimal())  # False
print(str4.isdigit())  # False

# isidentifier判断是否为标识符
str5 = '2abc'
str6 = 'apple'
print(str5.isidentifier())  # False
print(str6.isidentifier())  # True

# isalpha 判断是否全部为字母
print(str6.isalpha())  # True
print(str5.isalpha())  # False
str7 = 'abc中国'
# 默认将中文当做字母来看
print(str7.isalpha())  # True
# 如果强制判断字母和汉字区分开(了解即可)
print(str7.encode('utf-8').isalpha())  # False
print(str6.encode('utf-8').isalpha())  # True

作者:潘陈(Pxj)
你若安好便是晴天
日期:2022-09-04 15:12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值