python 10 字符串进阶

python 10 字符串进阶

一、字符串相关方法 字符串.xxx( )
1.字符串1 . join (序列) :将序列中的元素用指定的字符串1拼接在一起形成新的字符串(序列中的元素必须是字符串)
A=['sdgg','2345**','dg','))']
result='+'.join(A)
print(result)
##sdgg+2345**+dg+))
  • 注意:如果序列中的元素不是字符串,就要把这些元素转换成字符串

    A=[12,5,78,987]
    result='+'.join([str(x) for x in A])  列表利用列表表达式去转换元素类型
    print(result)
    ##12+5+78+987
    
2. 字符串1 . split(字符串2) :将字符串1中的所有的字符串2作为切割点对字符串1进行切割,返回包含切割后的每一段对应的字符串列表。
  • 字符串. split( 字符串2. N) : 将字符串1中前N个字符串2作为切割点对字符串1进行切割。(N限制了切割的次数)

    A='ASJIHIUASASNKBASHAS@4*AS'
    result=A.split('AS')
    result1=A.split('AS',3)
    print(result)
    print(A.split('AS'))
    print(result1)
    print(A.split('AS',5))
    ##
    ['', 'JIHIU', '', 'NKB', 'H', '@4*', '']
    ['', 'JIHIU', '', 'NKB', 'H', '@4*', '']
    ['', 'JIHIU', '', 'NKBASHAS@4*AS']
    ['', 'JIHIU', '', 'NKB', 'H', '@4*AS']
    ##切割点在开始和结尾,中间连续两个切割点产生空字符串
    
  • 注意:在字符串的开头、结尾、或连续两个切割点,会导致切割里会产生字符串。

3. 字符串1 . replace(字符串2 ,字符串3):将字符串1中所有字符串2都替换成字符串3.
A='ASJIHIUASASNKBASHAS@4*AS'
result=A.replace('AS','*+*')
print(result)
##
*+*JIHIU*+**+*NKB*+*H*+*@4**+*
4. 字符串 . strip( ) : 删除字符串中左右两端的空白字符
  • 转义字符\n换行,\t一个tab键

    A='          BCDVC         '
    B='\n\t       看看        \n\t'
    print(A)
    print(B)
    print(A.strip())
    print(B.strip())
    ##
              BCDVC         
    
    	            看看        
    	
    BCDVC
    看看
    
5. find, index
  • 字符串1. find (字符串2):获取字符串2在字符串1中第一次出现的位置(以0开始的下标值返回),如果不存在字符串2,返回-1.

    A='Ashbdc,sbc qwiso doh soi0 90dco2nmjdco'
    B='so'
    C='XX'
    print(A.find(B))
    print(A.find(C))
    ##
    14
    -1
    
  • 字符串1. Iindx (字符串2):获取字符串2在字符串1中第一次出现的位置(以0开始的下标值返回),如果不存在字符串2,会报错.

    A='Ashbdc,sbc qwiso doh soi0 90dco2nmjdco'
    B='so'
    C='XX'
    print(A.index(B))
    print(A.index(C))
    ##
    14
    报错ValueError: substring not found
    
  • 字符串1. find (字符串2,开始下标,结束下标)

  • 字符串1. find (字符串2,开始下标,结束下标)

    A='Ashbdc,sbc qwiso doh soi0 90dco2nmjdco'
    B='so'
    print(A.find(B,3,-2))
    print(A.index(B,3,-2))
    ## 
    14
    14
    
6. 其他
1) 字符串. casefold( )
A='jhdbcSGHJBCDJBI23456789'
print(A.casefold())
##
jhdbcsghjbcdjbi23456789
2) 字符串. center(字符串长度,‘ ’ )、字符串. ljust(字符串长度,‘ ’ )、字符串. rjust(字符串长度,‘ ’ )、字符串. zfill(字符串长度,‘ ’ )
A='567'
print(A.center(6,'@')) 
print(A.ljust(7,'+'))  
print(A.rjust(8,'!')) 
print(A.zfill(7))
##
@567@@
567++++
!!!!!567
0000567
3) 字符串. count(字符串 ):找到字符串2在字符串1中出现的次数。
A='SJDBDCK23LK%%$@LKL*S5DSBDWENIM'
B='BD'
C='MLM'
print(A.count(B))
print(A.count(C))
##
2
0
4)字符串. endswith ( )、字符串.startswith( ) : 判断两端的字符是不是括号里的字符
A='ASX@NFJDFVB0N5NK6'
print(A.startswith('ASX'),A.endswith('hkbh'))
## True False
5) 字符串.formate( )
6) 字符串. isdecimal( ) 、字符串.isdigit( )、字符串. isnumeric( )
print('2333'.isdecimal())
print('sbxh6weu'.isdigit())
print('壹一34'.isnumeric())
##
True
False
True
7)marketrans、translate
  • 创建一个映射表,根据映射表的对应关系,替换字符串中的相关字符

    A='SBDIEW'
    table=A.maketrans('SBDIEW','水电费规划局')
    print(A.translate(table))
    ##水电费规划局
    A='A7SAB9F20CD'
    table=A.maketrans('ABCDEFGH','abcdefgh')
    print(A.translate(table))
    ## a7Sab9f20cd
    
8) islower ( ): 判断是不是小写字母 , isupper( ) :判断是不是小写字母,也可以用来进行大小写的转换
A='SBDIEW'
print(A.upper())
print(A.lower())
###
SBDIEW
sbdiew
#
A='ASJIHIU%+DC'
for x in A:
    if x.isdigit() or x.islower() or x.isupper():
        print(x,end='')
##  ASJIHIUDC
二、字符串格式化

如何解决字符串内容变化问题,有三种方法:

解决问题:xxx今年xx岁!

1. 字符串拼接
name='画虎'
age='13'
message=name+'今年'+age+'岁!'
print(message)
## 画虎今年13岁!
2. 格式字符串
  • 语法:包含一个或多个格式占位符的字符串 %(数据1,数据2,数据3,···)

  • 常用的字符串占位符:

    • %s: - 字符串占位符,可以给任何类型的数据占位(字符串占位符)

    • %d: - 数字占位符,只能给数字数据占位(本身是整数占位符)

    • %f: - 只能给数字占位,(浮点数占位符,默认保留6位小数)

    • % . Nf - 只能给数字占位,浮点数占位,保留N位小数。

name='画虎'
age=35
income=12345678
message='%s今年%d岁,年收入%.2f元'%(name,age,income)
print(message)
## 画虎今年35岁,年收入12345678.00元
3. f-string的参数:
1) f-string的基本用法:如果子字符串的最外面加了f,就可以再字符串中通过{}来给字符串提供内容.
2){表达式} - 表达式的结果就是对应的字符串内容。
name='明明'
age=13
chinese_score=99.5
message=f'{name}今年{age}岁!语文成绩是{chinese_score}'
print(message)
## 明明今年13岁!语文成绩是99.5
  • a. 控制小数位数 :{提供数据的表达式:.Nf } .Nf控制小数位数.

    money=873483786846
    result1=f'余额:{money:.2f}'
    print(result1)
    result3=f'年薪:{money*15:.3f}'
    print(result3)
    num=3785.89347
    result=f'太秀:{num:.0f}'
    print(result)
    # 余额:873483786846.00
    # 年薪:13102256802690.000
    # 太秀:3786
    
  • b. 逗号分隔 : {提供数据的表达式:,}

    money=2678908765
    result=f'{money:,}'
    print(result)   #金额:2,678,908,765.00
    
    • 又想用逗号分隔,又想保留两位小数

      money=2678908765
      result=f'{money*13:,.2f}'
      print(result)   #金额:34,825,813,945.00
      
  • c. 小数显示百分比 : :{提供数据的表达式:. N%} (百分数保留几位小数)

    A=89
    print(f'合格率是:{A/100:.3%}')
    ### 合格率是:89.000%
    
  • d. 控制填充长度(实现center、rjust、ljust、zfill)

    {提供数据的表达式:字符>长度}、{提供数据的表达式:字符<长度}、{提供数据的表达式:字符^长度}
    如果没有提供提供字符,会用空格填充。

    A=56
    print(f'编码是ndcbdh{A:0>6}')
    print(f'号码是:WSHBC{A:x<4}') 
    print(f'排名是{A:0^8}')
    print(f'序号是{A:^9}') #没有提供填充的字符,就用空格来补充。
    ## 
    编码是ndcbdh000056
    号码是:WSHBC56xx
    排名是00056000
    序号是   56  
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值