一个小白的网安学习之路之Python入门三:Python字符串

字符串

定义

  • 基本数据类型之一,是一个不可变的字符序列

字符串的驻留机制(了解)

概念
  • Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
为驻留机制的几种情况(交互模式:win+R+python)
  • 字符串长度为0或1时

  • 符合标识符的字符串(只包含数字、下划线、字母且数字不可以开头)

  • [-5,256]之间的整数数字

    • 字符串只在编译时进行驻留,而非运行时
    • ==用于判断值是否相等,is用于判断地址是否相同
  • 见下图

    在这里插入图片描述

    PyCharm对字符串进行了优化处理

字符串驻留机制的优缺点
  • 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
  • 在需要进行字符串拼接时建议使用str类型的join方法,而非+
    ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。

字符串的常用查询操作

  • index( )、rindex( )、find( )、rfind( )

    在这里插入图片描述

    s = 'james,james'
    print(s.index('es')) #3
    print(s.find('es')) #3
    print(s.rindex('es')) #9
    print(s.rfind('es'))#9
    
    #print(s.index('h')) #报错
    print(s.find('h'))
    
    #print(s.rindex('h'))
    print(s.rfind('h'))
    

字符串的大小写转换操作

  • upper( )、lower( )、swapcase( )、capitalizes( )、title( )

    在这里插入图片描述

字符串的对齐操作

  • center( )、ljust( )、rjust( )参数类似,zfill( )用0补充

    在这里插入图片描述

    s = 'James,jamess'
    #居中对齐
    print(s.center(20,'*'))
    #左对齐
    print(s.ljust(20,'*'))
    print(s.ljust(12,'*'))
    print(s.ljust(20))
    
    #右对齐  自动默认使用0来补位
    print(s.zfill(20))
    print(s.zfill(12))
    print('-234'.zfill(8))
    

字符串的分隔操作

  • split( )、 rsplit( )

    在这里插入图片描述

    s = 'hello James boy'
    lst = s.split() #默认" "为标记来分割
    print(lst)
    
    #默认是从左到右进行分割
    s1 = 'hello|James|boy'
    print(s1.split(sep='|'))
    print(s1.split(sep='|',maxsplit=1))
    
    #从右到左分割
    s1 = 'hello|James|boy'
    print(s1.rsplit(sep='|'))
    print(s1.rsplit(sep='|',maxsplit=1))
    

判断字符串组成的方法

  • isidentifier( )、isspace( )、isalpha( )、isdecimal( ) 、isalnum( )

    在这里插入图片描述

    s = 'hello,James,boy'
    print('1.', s.isidentifier()) #False
    print('2.', 'james'.isidentifier()) #True
    print('3.', 'james_'.isidentifier()) #True
    print('4.', 'james_123'.isidentifier()) #True
    
    print('5.', '\n'.isspace()) #True
    print('6.', 'abc1'.isalpha()) #True
    print('7.', 'abc1'.isdecimal()) #False
    print('8.', '12'.isdecimal()) #True
    
    
    print('9.', '12'.isnumeric()) #True
    print('10.', '12四'.isnumeric()) #True
    
    print('11.', 'abc1'.isalnum()) #True
    print('12.', 'abc1!'.isalnum()) #False
    

字符串的替换和合并

  • 在这里插入图片描述

  • replace( )

    #replace替换
    s = 'hello,James,boy'
    print(s.replace('James','python'))#s的内容不变
    s1 = 'hello, james,james,james'
    print(s1.replace('james','python',2))
    
  • join( )

    #列表join连接
    lst = ['hello','James','boy']
    print('|'.join(lst))#hello|James|boy
    #元组join连接
    tt = ('hello','James','boy')
    print('*'.join(tt))#hello*James*boy
    print(''.join(tt))#helloJamesboy
    

字符串的比较操作

  • 比较运算符:>,>=,<,<=,==,!=

  • 比较规则: 首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较

  • 比较原理: 两字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal
    value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符

    print('james' > 'ja') #True
    print('james' > 'kate') #False
    print(ord('j'), ord('k')) #106	107
    print(chr(106),chr(107)) #'j'	'k'
    

    ==比较的是值,is比较的是id

字符串的切片

  • 字符串是不可变类型,改变其内容将产生新的对象

    s = 'hello,James'
    s1 = s[:5] #从0到5, 不包括5
    s2 = s[6:]
    s3 = '!'
    newstr = s1+s2+s3
    print(s1, id(s1))
    print(s2, id(s2))
    print(newstr, id(newstr))
    #三者id都不一样
    
  • 切片[start​ : end : step],规则见列表切片

    s = 'hello,James'
    print(s[:5]) #从0到5, 不包括5
    print(s[6:])
    print(s[1:5:1])
    print(s[::1]) #省去就是头和尾
    print(s[::-1])
    print(s[-6::1])
    

格式化字符串

  • %作占位符

    • %s,字符串
    • %i或%d,整数
    • %f,浮点数
    #占位符 %
    name = 'James'
    age = 36
    print(name, age)
    print('我叫%s, 今年%d' %(name,age))
    
  • { }做占位符

    #用{}定位位置
    name = 'James'
    age = 36
    print('我叫{0},今年{1}岁'.format(name, age))
    
  • f’{直接填充}’

    #直接填充
    name = 'James'
    age = 36
    print(f'我叫{name},今年{age}岁')
    

字符串的编解码

  • encoding=‘GBK’:1个中文占2个字节

  • encoding=‘UTF-8’:1个中文占3个字节

  • 编码:encode( ),把字符串转化为二进制

    s = '我很帅'
    #编码encode
    print(s.encode(encoding='GBK')) #打印二进制,1个中文占2个字节
    print(s.encode(encoding='UTF-8'))#打印二进制,1个中文占3个字节
    
  • 解码:decode( ),把二进制转化为字符串

    byte = s.encode(encoding='GBK')
    print(byte) #打印二进制
    print(byte.decode(encoding='GBK')) #打印中文
    
    byte = s.encode(encoding='UTF-8')
    print(byte) #打印二进制
    print(byte.decode(encoding='UTF-8')) #打印中文
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值