Python学习之第七天 字符串

今天为大家介绍的是Python中内置数据结构之一,字符串,以下为学习参考代码。

# 机构:家里蹲
# 作者:青灬火
# 时间:2021/7/19 7:29

'''
字符串的驻留机制
    在python中字符串是基本数据类型,是一个不可变的字符序列
驻留机制:
    仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,
    Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,
    不会开辟新的空间,而是把该字符串的地址赋给新创建的变量
'''
a = 'Python'
a1 = "Python"
a2 = '''Python'''
print(a, id(a)) #Python 2549899614128
print(a1, id(a1)) #Python 2549899614128
print(a2, id(a2)) #Python 2549899614128
'''
字符串驻留机制的优缺点:
    当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,
    因此拼接字符串和修改字符串是会比较影响性能的
    
    在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,
    然后再拷贝,只new一次对象,效率要比"+"效率高
'''

#字符串的常用操作
'''
字符串的查询操作方法
    index(): 查找子串substr第一次出现的位置,如果查找的字串不存在时,则抛出ValueError
    rindex(): 查找子串substr最后一次出现的位置,如果查找的字串不存在时,则抛出ValueError
    find(): 查找子串substr第一次出现的位置,如果查找的字串不存在时,则返回 -1
    rfind(): 查找子串substr最后一次出现的位置,如果查找的字串不存在时,则返回 -1
'''
s = 'helloWorld'
print(s.index('l')) #2
print(s.find('l')) #2
print(s.rindex('l')) #8
print(s.rfind('l')) #8
#print(s.index('5')) #ValueError: substring not found
#print(s.rindex('5')) #ValueError: substring not found
print(s.find('5')) # -1
print(s.rfind('5')) # -1

'''
字符串大小写转换操作的方法
    upper(): 把字符串中所有字符都转成大写字母
    lower(): 把字符串中所有字符都转成小写字母
    swapcase(): 把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母
    capitalize(): 把第一个字符转换为大写,把其余字符转换为小写
    title(): 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
'''
s = 'hello, python'
a = s.upper()
print(a) #HELLO, PYTHON
b = a.lower()
print(b) #hello, python
s = 'hello, PYTHON'
print(s.swapcase()) #HELLO, python
print(s.capitalize()) #Hello, python
print(s.title()) #Hello, Python

'''
字符串内容对其操作的方法
    center(): 居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,
              如果设置宽度小于实际宽度则返回原字符串
    ljust(): 左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,
             如果设置宽度小于实际宽度则返回原字符串
    rjust(): 右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,
             如果设置宽度小于实际宽度则返回原字符串
    zfill(): 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身
'''
s = 'hell0,Python'
s1 = s.center(20, '*')
print(s1) #****hell0,Python****
s1 = s.ljust(20, '*')
print(s1) #hell0,Python********
s1 = s.rjust(20, '*')
print(s1) #********hell0,Python
print(s) #hell0,Python
s1 = s.zfill(20)
print(s1) #00000000hell0,Python

s1 = s.center(5, '*')
print(s1) #hell0,Python
s1 = s.ljust(5, '*')
print(s1) #hell0,Python
s1 = s.rjust(5, '*')
print(s1) #hell0,Python
print(s) #hell0,Python
s1 = s.zfill(5)
print(s1) #hell0,Python

'''
字符串劈分操作的方法
    split(): 从字符串的左边开始劈分,默认的劈分字符时空格字符串,返回值是一个列表
             以通过参数sep指定劈分字符串的是劈分符
             通过参数maxsplit指定劈分字符穿时的最大劈分次数,在经过最大次劈分之后,剩余的字符串会单独做为一部分
    
    rsplit(): 从字符串的右边开始劈分,默认的劈分字符时空格字符串,返回值是一个列表
              以通过参数sep指定劈分字符串的是劈分符
              通过参数maxsplit指定劈分字符穿时的最大劈分次数,在经过最大次劈分之后,剩余的字符串会单独做为一部分
'''
s = 'hello world python'
s1 = s.split()
print(s1) #['hello', 'world', 'python']

s = 'hello|world|python'
s1 = s.split()
print(s1) #['hello|world|python']
s1 = s.split('|')
print(s1) #['hello', 'world', 'python']
s1 = s.split(sep='|', maxsplit=2)
print(s1) #['hello', 'world|python']

s = 'hello world python'
s1 = s.rsplit()
print(s1) #['hello', 'world', 'python']
s = 'hello|world|python'
s1 = s.rsplit('|')
print(s1) #['hello', 'world', 'python']
s1 = s.rsplit('|', 1)
print(s1) #['hello|world', 'python']

'''
判断字符串的方法
    isidentifier(): 判断指定的字符串是不是合法的标识符
    
    isspace(): 判断指定的字符串是否全部由空白字符组成(回车,换行,水平制表符)
    
    isalpha(): 判断指定的字符串是否全部由字母组成
    
    isdecimal(): 判断指定字符串是否全部有十进制的数字组成
    
    isnumeric(): 判断指定的字符串是否全部由数字组成
    
    isalnum(): 判断指定字符串是否全部由字母和数字组成
'''
s = 'hello,python'
print(s.isidentifier()) #False 合法的标识符时数字,字母,下划线,不包括逗号
print(s.isspace()) #False
print(s.isalpha()) #False
print(s.isnumeric()) #False
print(s.isalnum()) #False
s = ' '
print(s.isspace()) #True
s = 'asfsag'
print(s.isalpha()) #True
print(s.isalnum()) #True
s = '1234567890'
print(s.isnumeric()) #True
print(s.isalnum()) #True
print(s.isdecimal()) #True
s = 'afasf1543'
print(s.isalnum()) #True

'''
replace(): 第一个参数指定被替换的子串,第二个参数指定替换字串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,
           调用该方法时可以通过第三个参数指定最大替换次数
join(): 将列表或元组中的字符串合并成一个字符串
'''
s = 'hello,python'
s1 = s.replace('python', 'java')
print(s) #hello,python
print(s1) #hello,java
s = 'hello,python,python,python'
s1 = s.replace('python', 'jave', 2)
print(s1) #hello,jave,jave,python

lst = ['hello', 'java', 'python']
print('|'.join(lst)) #hello|java|python
print(''.join(lst)) #hellojavapython
t = ('hello', 'java', 'python')
print(''.join(t)) #hellojavapython
print('*'.join('Python')) #P*y*t*h*o*n

#字符串的比较
print('apple' > 'app') #True
print('apple' > 'banana') #False

#字符串的切片操作
'''
字符串时不可变类型
    不具备增删该操作
    切片操作将产生新的对象
'''
s = 'hello,python'
print(s[:5]) #hello
print(s[6:]) #python
print(s[1:5:1]) #ello 从1开始截到5(不包含5),步长为1
print(s[1:5:2]) #el 从1开始截到5(不包含5),步长为2
print(s[::2]) #hlopto 从头开始到结尾,步长为2
print(s[::-1]) #nohtyp,olleh

#格式化字符串
'''
两种方式
    %做占位符
        %s 字符串
        %i或%d 整数
        %f 浮点数
    {}作占位符
'''
s = '我的名字叫:%s, 今年%d岁了'
print(s % ('Sam', 27)) #我的名字叫:Sam, 今年27岁了

s = '我的名字叫:{0}, 今年{1}岁了, 英文名是:{0}'
print(s.format('Sam', 27)) #我的名字叫:Sam, 今年27岁了, 英文名是:Sam

#f-string
name = 'Sam'
age = 27
print(f'我的名字叫:{name}, 今年{age}岁了') #我的名字叫:Sam, 今年27岁了

print('%d' % 99) #99
print('%10d' % 99) #        99 10代表宽度

print('%f' % 3.141592) #3.141592
print('%.3f' % 3.141592) #3.142  保留小数点后三位
print('%10.3f' % 3.141592) #     3.142 总宽度为10,小数点后三位

print('{0}'.format(3.1415926)) #3.1415926

print('{0:.3}'.format(3.1415926)) #3.14 三位数字
print('{0:.3f}'.format(3.1415926)) #3.142 三位小数
print('{0:10.3f}'.format(3.1415926)) #     3.142 宽度为10,三位小数

#字符串的编码转换
'''
    编码:将字符串转换为二进制数据(bytes)
    解码:将bytes类型的数据转换成字符串类型
'''
s = '人生艰难,猫猫叹气'
print(s.encode('GBK')) #b'\xc8\xcb\xc9\xfa\xbc\xe8\xc4\xd1\xa3\xac\xc3\xa8\xc3\xa8\xcc\xbe\xc6\xf8' 在GBK的编码格式中,一个中文占两个字节
print(s.encode('UTF-8')) #b'\xe4\xba\xba\xe7\x94\x9f\xe8\x89\xb0\xe9\x9a\xbe\xef\xbc\x8c\xe7\x8c\xab\xe7\x8c\xab\xe5\x8f\xb9\xe6\xb0\x94'
#在UTF-8的编码格式中,一个中文占三个字节

print(s.encode('GBK').decode('GBK')) #人生艰难,猫猫叹气
print(s.encode('UTF-8').decode('UTF-8')) #人生艰难,猫猫叹气

扫码关注公众号“JAVA记录册”

该公众号致力于为大家分享工作中会用到一些简单实用的小知识,而不是那些悬在云端的高大上但又感觉空泛的文章,欢迎大家关注,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值