• python 字符串


    字符串

    一、字符串

    字符串是Python中常用的数据类型,用引号(可以是单引号、双引号和三引号)括起来的数据类型就是字符串

    #字符串三种不同的表示
    s='hello' h="world" l='''!!!''' print(type(s)) print(type(h)) print(type(l)) 输出结果: <class 'str'> <class 'str'> <class 'str'>

    其中,三引号,可以表示多行字符串

    m='''
    情深不寿,
    强极则辱;
    谦谦君子,
    温润如玉。
    '''
    print(m)
    
    输出结果:
    情深不寿, 强极则辱; 谦谦君子, 温润如玉。

    问题一:三引号什么时候用作注释,什么时候用作字符串

    • 代码后续会用到的,就将三引号用作字符串
    • 后续代码不使用,只是想对该模块进行解释说明,就将三引号用作注释

    问题二:三引号的其他使用方法

    • 引号嵌套,单引号嵌套双引号,双引号嵌套单引号,三引号为任何区别
    • 三引号可以用来作为注释
    • 三引号可以保存字符串的格式(如:在三引号括起来的字符串内容,书写是什么格式,输出就是什么格式)
    • 双引号需要依赖连接符来连接换行()

    二、字符串的常用操作

    1.字符串对成员运算符的使用  (可以使用成员运算符:in  not in  来判断该字符串中是否存在查找的元素)

    m='''
    情深不寿,强极则辱;谦谦君子,温润如玉。
    '''
    print('' in m)
    print('' not in m)
    
    输出结果:
    False
    True

    2.字符串的取值(用到字符串的索引,取出字符串中想要取出来的部分)

    • 字符串的取值原理:索引   字符串内的每个字符都有对应的下标,索引是从0开始,位置是从1开始
    • 下标==索引值
    • 索引的取值方向
      • 正序索引:从0开始
      • 反序索引:从-1开始(也就是从字符串的末尾开始)

    如何使用索引值取出对应的字符

    m='''情深不寿,强极则辱;谦谦君子,温润如玉。'''
    print(m[0])   #情,索引值为0,就是对应位置1的字符
    print(m[2])   #不   索引值为2,就是对应位置3的字符
    print(m[10])  #谦  索引值为10,就是对应位置11的字符
    
    输出结果:
    情
    不
    谦
    • 索引超出范围   报indexerror错误
    m='''情深不寿,强极则辱;谦谦君子,温润如玉。'''
    print(m[30])
    
    输出结果:
    IndexError: string index out of range

    3.字符串的切片(利用索引对字符串进行切片)

    • 切片:可以从字符串中获取子字符串,也就是原来字符串中的一部分
    • 切片的定义:使用一对方括号,起始位置start、终点位置end、可选步长step,来定义一个切片
    • 切片的格式:[start_index:end_index:step]
      • start_index:起始位置,如果不传值,则默认为0
      • end_index:终点位置,如果不传值,则默认为0
      • step:步长,如果不传值,则默认为1,不能为0,用来设定取值之间的间隔   默认值是1,如果步长为1,可以选择不写
    • 切片的特点:取头不取尾
    m='''情深不寿,强极则辱;谦谦君子,温润如玉。'''
    print(m[1:6])   #深不寿,强  ---(取头不取尾,实际就是索引值为1到索引值为5,之间的字符
    print(m[:])   #情深不寿,强极则辱;谦谦君子,温润如玉。---(利用索引复制字符串
    print(m[:8])  #情深不寿,强极则 ---- (索引值为0到索引值为7,之间的字符
    print(m[::2])   #情不,极辱谦君,润玉 ---- (对整个字符串,隔一个字符取一个值
    print(m[::-1])   #。玉如润温,子君谦谦;辱则极强,寿不深情 ----(对整个字符串,倒叙取值
    print(m[-2:-4:-1])   #玉如 ----(从尾部第二个元素到尾部第三个元素的取值
    
    输出结果:
    深不寿,强
    情深不寿,强极则辱;谦谦君子,温润如玉。
    情深不寿,强极则
    情不,极辱谦君,润玉
    。玉如润温,子君谦谦;辱则极强,寿不深情
    玉如

    4.字符串切片的常规操作

    • [ : ]     利用切片复制字符串
    • [start: ]    从start开始截去到尾部
    • [ :end]   从开头截取到end(取头不取尾,也就是截取到end位置的前一个字符)
    • [start:end]  从start位置截取到end(取头不取尾,也就是截取到end位置的前一个字符)
    • [ : :-1]    将整个字符串进行倒序

    5.字符串切片中需要注意的地方:

    • start到end取值时,如果设置步长必须与start到end的方向一致
    • 如果是从左向右进行切片,那步长设置为正方向,也就是正数       eg:[1:8:4]   从下标为1的位置,取值到下标为2的位置,步长为4
    • 如果是从右向左进行切片,那步长设置为反方向,也就是负数       eg:[-2:-4:-1]  从尾部第二个元素到尾部第三个元素的取值,步长为-1
    • 如果步长和取值的方向不一致,不会输出任何结果,但也不会报错    eg:[2:4:-2]    取不到值,结果不会输出,但也不会报错

    6.字符串的格式化输出

        (1)%s  %f  %d   为常用的几个格式化符号

    • %s  格式化字符串
    • %f   格式化浮点数字,可以指定小数点后的精度
    • %d  格式化整数
    print('''
    =====个人信息=====
    姓名:%s
    年龄:%d
    性别:%s
    家庭地址:%s
    薪水:%f
    '''%('小张',18,'','北京市海淀区',8500.55))#传的参数要按照对应的顺序传入,然后格式化输出
    
    输出结果:
    =====个人信息=====
    姓名:小张
    年龄:18
    性别:男
    家庭地址:北京市海淀区
    薪水:8500.550000

       (2)格式化函数:format()

    • 基本语法:通过 {} 和 :   代替之前的%
    • format函数可以接受不限个参数,而且位置可以不按顺序
    • {}占位符,个数最好跟format后面括号里面的数据个数保持一致,如果不一致,{}要比数据少,如果有重复输出,在{}中写上对应参数的位置数
    • format()括号里面的数据是有索引的,也就是从0开始,可以在{}中指定取值的索引
    • {}里面要是给定索引值,必须全部都给索引值,不能有的有索引值,有的没有索引值
    • 关键字索引:传参比较多的时候使用,比较方便

    format函数的使用方法,如下

    #使用format格式化函数
    
    #方法一(指定位置)
    print('{} {}'.format('hello','world'))  #不设置指定位置,按默认顺序来
    print('{0}{1}'.format('蓝天','白云'))    #设置指定位置
    print('{0}{1},{1}{0}'.format('蓝天','白云'))    #设置指定位置
    
    #方法二(设置参数)
    
    print('网站名:{name},地址:{url}'.format(name='百度',url='www.baidu.com'))
    
    #通过字典设置参数
    dict={"name":"百度","url":"www.baidu.com"}
    print('网站名:{name},地址:{url}'.format(**dict)) 
    
    #通过列表设置参数
    list=["百度","www.baidu.com"]
    print('网站名:{0[0]},地址:{0[1]}'.format(list))  #使用列表设置参数,索引值前的0,是必须要写的
    
    输出结果:
    
    hello world
    蓝天白云
    蓝天白云,白云蓝天
    网站名:百度,地址:www.baidu.com
    网站名:百度,地址:www.baidu.com
    网站名:百度,地址:www.baidu.com

    三、字符串中常用方法

    1.find() 方法

    • 定义:检测字符串中是否包含子字符串,如果指定开始(beg)和结束(end)的范围,则检测是否包含在指定范围内,如果指定范围内含有查找的字字符串,则返回子字符串在指定范围内的起始索引值,如果未找到,不存在,返回-1
    • 语法:str.find(str, beg=0, end=len(string))     str -- 指定检索的字符串    beg -- 开始索引,默认为0。   end -- 结束索引,默认为字符串的长度。
    • 返回值:如果包含子字符串返回开始的索引值,否则返回-1。
    #find()  不传入起始点和结束点参数
    str='三生三世十里桃花'
    print(str.find('十里')) #4,对应的是查找的字符起始的索引值
    print(str.find('小狗'))  #-1,因为该字符串内不含有查找的内容,所以返回-1
    print(str.find("三生三世",4)) #从索引值为4的位置查找元素,查找不到,返回-1
    print(str.find("十里",0,6))  #从开始位置到索引值为6的位置,查找子字符串,返回为4
    
    输出结果:
    4
    -1
    -1
    4

    2.index() 方法

    • 字符串中是否含有查找的子字符串
    • 如果能查到子字符串,返回子字符串在指定范围内的起始索引值
    • 如果子字符串不存在,直接报错,返回 ValueError: substring not found
    str='三生三世十里桃花'
    print(str.index("十里"))  #4,子字符串起始索引值
    print(str.index("小狗"))  #ValueError: substring not found,index() 如果查找不到,会报错,返回ValueError
    
    输出结果:
    4
    ValueError: substring not found

    总结:find() 和 index() 的区别:

    1. 都是查找字符串内是否含有查找的子字符串
    2. 查找到的子字符串,返回结果都为,子字符串起始的索引值
    3. 不同点,find() 在查找不到的情况下,返回-1。 index()  在查找不到的情况下,会报错,返回ValueError

    3.join() 字符串拼接的高级用法

    • 用来连接序列中的元素,是字符串中很重要的方法,是split()方法的逆方法
    • 需要被连接的序列元素必须都是字符串!!!!!
    list=["三生","三世","十里","桃花"]
    print("".join(list))  #字符串之间无空格连接
    print("*".join(list))   #字符串之间用*连接
    print(type("*".join(list)))    #join()操作的对象为字符串类型
    
    
    #可以用来拼接文件地址
    mydir='','user','bin','eve'
    print('D:'+'\'.join(mydir))   #拼接的文件地址:D:userineve
    
    输出结果:
    三生三世十里桃花
    三生*三世*十里*桃花
    <class 'str'>
    D:userineve

    4.split()  方法

    • 通过指定分隔符对字符串进行切片,将字符串分割成序列,是join()的逆方法
    • 语法:str.split(str="", num=string.count(str))   
    • str -- 分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等。  num -- 分割次数。默认为 -1, 即分隔所有。
    • split()返回的数据类型为列表,split内的传参就是分隔符
    str='三生*三世*十里桃花'
    print(str.split('*'))  
    print(str.split(''))
    print(str.split(' '))
    
    输出结果:
    ['三生', '三世', '十里桃花']
    ['', '生*', '世*十里桃花']
    ['三生*三世*十里桃花']

    5.strip()

    • 用于移除字符串头尾指定的字符(默认为空格或者是换行符,或者是字符序列)
    • 此方法只适用于移除开头或者是结尾的字符,不能移除中间部分的字符
    • 语法:str.strip([chars])     chars -- 移除字符串头尾指定的字符序列
    • 返回值:返回移除字符串头尾指定的字符生成的新字符串
    str='******今天晚上有流星雨*****'
    str1='00000.txt.exe....'
    str2='12hello21'
    print(str.strip('*'))
    print(str1.strip('0'))
    print(str2.strip('12'))
    
    输出结果:
    今天晚上有流星雨
    .txt.exe....
    hello

    6.lower() 

    • 将字符串中的大写字母转换为小写字母
    #将大写字母转换为小写字母
    str='I LOVE chain'
    print(str.lower())
    
    输出结果:
    i love chain

    7.upper()

    • 将字符串中的小写字母转为大写字母。
    #将小写字母转换为大写字母
    str='I LOVE chain'
    print(str.upper())
    
    输出结果:
    I LOVE CHAIN

    8.swapcase()

    • 翻转字符串中的大小写,也就是将字符串中的大写字母改为小写字母,小写字母为大写字母
    #翻转字符串中的大小写
    str='I LOVE chain'
    print(str.swapcase())
    
    输出结果:
    i love CHAIN

    9.replace()

    • 定义:将字符串中的old(旧字符串)替换成new(新字符串),如果指定了第三个参数max,则替换不超过max次
    • 语法:str.replace(old, new[, max])
    • old -- 将被替换的子字符串    new -- 新字符串,用于替换old子字符串。   max -- 可选字符串, 替换不超过 max 次
    str1='00000.txt.exe....'
    print(str1.replace('0','#'))  #将字符串中的0全部替换成#号显示
    print(str1.replace('0','!',3))  #将字符串中的0全部替换成!号,但是最大替换次数不能超过3次
    
    输出结果:
    #####.txt.exe....
    !!!00.txt.exe....

    10. count()

    • 用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置
    • 语法:str.count(sub, start= 0,end=len(string))
    • sub -- 搜索的子字符串  
    • start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
    • end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
    • 返回值:返回子字符串在字符串中出现的次数。
    str='******今天晚上有流星雨*****'
    print(str.count('*'))  #字符串中*号出现的次数
    print(str.count('*',6))  #从索引值为6的位置开始到结束,*号出现的次数
    print(str.count('*',6,12))  #从索引值为6到索引值为12的位置,*号出现的次数
    
    输出结果:
    11
    5
    0

  • 相关阅读:
    540C: Ice Cave
    540B :School Marks
    欧拉工程第52题:Permuted multiples
    欧拉工程第51题:Prime digit replacements
    C. Tourist's Notes
    B. Quasi Binary
    Keepalived安装后出现的问题总结
    Keepalived+HAproxy实现高可用负载均衡
    CentOS.56安装Redis监控工具RedisLive
    Redis+Keepalived主从热备秒级切换
  • 原文地址:https://www.cnblogs.com/lucky1212/p/13610333.html
Copyright © 2020-2023  润新知