zoukankan      html  css  js  c++  java
  • 🍖字符串类型内置方法

    引入

    前面"Python开发入门"那一章已经对python基本的数据类型进行了大概的描述,以下我们主要从其内置方法来学习

    一.定义方式

    • 每一个数据类型都自带一个制造的 "工厂"
    • 那么字符串类型的 "工厂" 就是 str
    msg = 'abc'
    背后的操作就是
    msg = str("abc")
    

    二.数据类型转换

    • str 工厂可以把所有类型转成字符串类型
    x = 111
    y = 2.5
    z = [111,222,333]
    v = {"name":"shawn"}
    print(type(str(x)))  #<class 'str'>
    print(type(str(y)))  #<class 'str'>
    print(type(str(z)))  #<class 'str'>
    print(type(str(v)))  #<class 'str'>
    

    三.常用操作 + 内置方法

    优先掌握的操作(*********)

    1.按照索引取值(正向取+反向取)

    • 只能取值,不能改值(不可变类型)
    msg = 'hello world'
    正向取
    print(msg[0])   # h
    print(msg[5])   # 取到的是空格
    
    反向取
    print(msg[-1])  # d
    
    如果改值就会报错
    # msg[0] = 'H'  # 报错
    

    2、切片:索引的拓展应用

    • 从一个字符串中拷贝出一个子字符串
    msg = 'hello world'
    顾头不顾尾
    print(msg[0:3])   # hel
    print(msg[0:5])   # hello
    
    步长
    print(msg[0:8:2])   # hlow
    
    反向步长
    print(msg[5:0:-1])  #  olle
    
    拷贝字符串
    print(msg[:12])          # hello world
    print(msg[:len(msg)])    # hello world
    print(msg[0:])           # hello world
    print(msg[:])            # hello world (更简洁)
    
    将字符串顺序反向
    res = msg[::-1]
    print(res)      # dlrow olleh
    

    3、长度 len:统计的是字符个数

    • 通常配合for循环使用,索引取值
    msg = 'hello world'
    print(len(msg))  # 13
    

    4、成员运算 in 和 not in

    • 判断一个子字符在步子啊一个大字符串里面,in不in
    msg="hello world"
    "in"
    print("he" in msg)
    print("h" in msg)
    
    "not in"
    print(not 'egon' in msg)
    print('egon' not in msg)  # 推荐
    

    5、移除空白 strip

    • 默认是左右两侧空格, 但可以指定符号
    • 也可以填多个符号, 一般用于用户输入
    字符串左右两边有空白
    name="    shawn        "
    print(name.strip())  #shawn
    print(name)   #"    shawn    "原值并没有改变,产生的是新值
    
    只去两边,不会去掉中间的,指定的是什么就去什么
    name="** *eg*on***"
    print(name.strip("*"))   # *eg*on"
    
    指定多个符号
    x="*(-)=+abc=-)*/"
    print(x.strip("*()-=+/"))  # ABC
    
    通常用于去掉用户手抖输入的空格
    name=input("username>>>: ").strip()
    pwd=input("password>>>: ").strip()
    if name == "egon" and pwd == "123":
        print("ok")
    else:
        print('error')
    

    6、切分 split

    • 把一个有规律的字符串按照某种分隔符进行切分
    • 并且是从左往右切, 得到的是一个列表
    默认切分的分隔符是空格
    info = 'shawn  age 18 sex male'
    res = info.split()
    print(res)  # ['shawn','age', '18','sex', 'male']
    
    指定分隔符
    info = 'shawn:age:18:sex:male'
    res = info.split(':')
    print(res)  # ['shawn','age', '18','sex', 'male']
    
    指定分隔次数
    info = 'shawn  age 18 sex male'
    res = info.split(':', 2)    # 1表示从左边开始,只切分两次:
    print(res)  # ['shawn','age', '18:sex:male']
    

    7、循环

    • 循环取出子字符
    msg="hello"
    for i in msg:
        print(i)
    

    需要掌握的操作(****)

    1.strip,lstrip,rstrip : 不同方向移除指定符号

    • strip : 移除字符串左右两侧的符号
    • lstrip : 移除字符串左侧的符号
    • rstrip : 移除字符串右侧的符号
    msg="***hello***"
    print(msg.strip("*"))  #hello
    print(msg.lstrip("*")) #hello***
    print(msg.rstrip("*")) #***hello
    

    2、lower, upper : 小写,大写

    • lower : 将字母转化为全小写
    • upper : 将字母转化为全大写
    msg="HeLlo"
    print(msg.lower())  #hello
    print(msg.upper())  #HELLO
    print(msg)          #HeLlo (原值不变)
    

    3、startswith,endswith : 判断开头结尾

    • startswith : 判断是否以给定的字符串开始
    • endswith : 判断是否以给定的字符串结束
    msg="hello word"
    print(msg.startswith("he"))     #True
    print(msg.startswith("hello"))  #True
    print(msg.endswith("rd"))       #True
    

    4、format 的三种玩法 : 字符串格式化

    直接传变量名
    res="my name is {name} my age is {age}".format(age=18,name="shawn")
    print(res)  #my name is shawn my age is 18
    
    不放任何值, 让其按位置自动传值
    res="my name is {} my age is {}".format(18,"shawn")
    print(res)  #my name is 18 my age is shawn
    
    通过索引传值
    res="my name is {0}{0}{0} my age is {1}{0}".format(18,"shawn")
    print(res)  #my name is 181818 my age is shawn18
    
    • .format 的高级玩法
      1. 对齐
    传入值左对齐, 共占"10"的字符位置, 不足以"*"填充
    res="my name is {0:*<10} my age is {1}".format(18,"shawn")
    print(res)  #my name is 18******** my age is shawn
    
    传入值右对齐, 共占"10"的字符位置, 不足以"*"填充
    res="my name is {0:*>10} my age is {1}".format(18,"shawn")
    print(res)  #my name is ********18 my age is shawn
    
    传入值居中对齐, 共占"10"的字符位置, 不足以"*"填充
    res="my name is {0:*^10} my age is {1:=^10}".format(18,"shawn")
    print(res)  #my name is ****18**** my age is ==shawn===
    

    ​ 2.进制与精度

    二进制转换
    res="{0:b} ".format(18)
    print(res)  #10010
    
    八进制转换
    res="{0:o} ".format(18)
    print(res)  #22
    
    十六进制转换
    res="{0:x} ".format(18)
    print(res)  #12 
    
    三位一体以","分隔开
    res="{0:,} ".format(13333333338)
    print(res)  #13,333,333,338 
    
    保留小数位(四舍五入)
    res="{0:.3f} ".format(3.7777)
    print(res)  #3.778
    

    5、split,rsplit : 从不同方向对字符切分

    • split : 把字符串按照指定的字符从左开始切成列表
    • rsplit : 把字符串按照指定的字符从右开始切成列表
    从左右两边切的次数不同, 效果就不同
    info="root:123:0:0"
    print(info.split(":",2))  #['root', '123', '0:0']
    print(info.rsplit(":",2)) #['root:123', '0', '0']
    

    6、join : 列表拼接成字符

    • 按照指定的分隔符, 将一个列表拼接成一个大字符串
    • 这个列表里的元素必须全为字符串类型

    ps : 单纯的使用 "+" 拼接字符串效率太低, 因为它需要申请新的内存空间

    l=["a","b","c"]
    "+" 方法不推荐
    print(l[0]+":"+l[1]+":"+l[2])
    
    使用":"拼接
    res=":".join(l)
    print(res)  #root:123:0:0
    
    与"split"相对使用
    info="root:123:0:0"
    l=info.split(":")
    print(l)            #['root', '123', '0', '0']
    print(":".join(l))  #root:123:0:0
    

    7、replace : 替换

    • 三个参数: 第一个是原值, 第二个是新值, 第三个是指定替换的次数, 默认不指定
    msg="song is song hai xing"
    res=msg.replace("song","SONG",2)
    print(res)  #SONG is SONG hai xing
    

    8、isdigit : 判断字符串是否由纯数字组成

    • 通常用于接收用户输入个数时
    print('123'.isdigit())   # True
    print('12.3'.isdigit())  # False
    
    用户输入示例
    age=input("your age>>").strip()
    if age.isdigit():
        age=int(age)
    else:
    	print("请输入数字")
    

    需要了解的操作(***)

    1、find, rfind, index, rindex : 查找字符串

    • find : 指定子字符在大字符串中的从左侧开始的起始位置的索引
    • rfind : 指定子字符在大字符串中的从右侧开始的起始位置的索引
    • index : 指定子字符在大字符串中的从左侧开始的起始位置的索引
    • rindex : 指定子字符在大字符串中的从右侧开始的起始位置的索引

    ps : find 找不到字符串会返回 "-1", 而 index 会报错

    msg='song hai xing song hhh'
    find, rfind
    print(msg.find('sb'))
    print(msg.find('song'))
    print(msg.find('song',13,20))
    print(msg.rfind('song'))
    
    index, rindex
    print(msg.index('song'))
    print(msg.rindex('song'))
    print(msg.index('sb'))  #找不到会报错,而find不会
    

    2.count : 统计字符出现的个数

    msg = 'shawnnnn'
    print(msg.count('n'))   # 4
    

    3.center,ljust,rjust,zfill : 字符对齐

    • .center : 居中

    • .ljust : 左对齐填充

    • .rjust : 右对齐填充

    • .zfill : 默认以"0"右填充

    不放符号的话,默认空格填充
    print('========song========')
    print('song'.center(40,'@'))
    print('song'.ljust(40,'$'))
    print('song'.rjust(30,'&'))  
    print('song'.zfill(40))  #右对齐以 "0" 填充
    

    3、expandtabs : 可以指定Tab键的空格数

    msg='abc\tdfg'            #\t  指的是Tab键
    print(msg.expandtabs(4))  #指定空格数为4
    

    4、captalize,swapcase,title : 大小写设置

    • .captalize : 首字母为大写,其他都为小写

    • .swapcase : 大写换小写,小写换大写

    • .title : 每个单词的首字母都换成大写

    print('ytdGFHGgfh'.capitalize())  #Ytdgfhggfh
    print('jhkjJKHJKjkhk'.swapcase()) #JHKJjkhjkJKHK
    print('song hai xing'.title())    #Song Hai Xing
    

    5、is 数字系列

    num1=b'4'  #bytes
    num2=u'4'  #unicode python3中无需加u就是unicode
    num3=u'肆' #中文数字
    num4=u'Ⅳ' #罗马数字
    
    • .isdigit(): bytes, unicode类型的阿拉伯数字

    print(num1.isdigit()) #T
    print(num2.isdigit()) #T
    print(num3.isdigit()) #F
    print(num4.isdigit()) #F
    
    • .isdecimal(): unicode类型的阿拉伯数字

    print(num2.isdecimal()) #T
    print(num3.isdecimal()) #F
    print(num4.isdecimal()) #F
    
    • .isnumberic(): unicode类型的阿拉伯 \中文 \罗马数字

    print(num2.isnumeric()) #T
    print(num3.isnumeric()) #T
    print(num4.isnumeric()) #T
    

    结论:尽管用第一个.isdigit就行

    6、is 其他系列

    判断字符是否全由字母组成
    print('asdfaaAsfd'.isalpha())  #True
    
    判断字符是否由字母 或 数字组成
    print('asdf'.isalnum())        #True
    
    判断首字母是否大写
    print('I Am Egon'.istitle())   #True
    
    判断是否是空格
    print('    '.isspace())        #True
    
    判断是否是一个有效的标识符,数字开头就不合法
    print('print'.isidentifier())  #True
    print('123nt'.isidentifier())  #Flase
    

    ps : Python中汉字是当做字母来判断的, 加上字符编码属性可以解决

    纯字母
    s = 'shawnHAHA'
    print(a.isalpha())            # True
    
    含汉字
    s = 'shawn哈哈哈'
    print(a.isalpha())           # True
    
    纯汉字
    s = '哈哈哈'
    print(a.isalpha())           # True
    
    加上字符编码属性
    s = 'sas哈哈哈'
    print(a.encode("utf-8").isalpha())  # Flase
    

    四.总结

    • 只能存一个值
    • 有序 (有索引的就是有序)
    • 不可变类型--->可 hash 类型
  • 相关阅读:
    PageRank
    Map-Reduce基础
    Docker Hadoop LAMP安装配置教程
    HDFS Architecture
    Goole Search Auto Complete
    TopK-微博今日热门话题
    Hadoop开发环境搭建
    文本数据挖掘 Matrix67: The Aha Moments
    神经风格转换Neural Style Transfer a review
    神经风格转换 (Neural-Style-Transfer-Papers)
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14017964.html
Copyright © 2011-2022 走看看