当前位置: 首页 > news >正文

python之字符串类型内置方法

python之字符串类型内置方法

文章目录

  • python之字符串类型内置方法
    • 引入
    • 一.定义方式
    • 二.数据类型转换
    • 三.常用操作 + 内置方法
    • 优先掌握的操作(***\******)
      • 1.按照索引取值(正向取+反向取)
      • 2、切片:索引的拓展应用
      • 3、长度`len`:统计的是字符个数
      • 4、成员运算`in` 和 `not in`
      • 5、移除空白 `strip`
      • 6、切分`split`
      • 7、循环
    • 需要掌握的操作()
      • 1.`strip,lstrip,rstrip`: 不同方向移除指定符号
      • 2、`lower, upper`: 小写,大写
      • 3、`startswith,endswith`: 判断开头结尾
      • 4、`format` 的三种玩法 : 字符串格式化
      • 5、`split,rsplit`: 从不同方向对字符切分
      • 6、join : 列表拼接成字符
      • 7、`replace` : 替换
      • 8、`isdigit` : 判断字符串是否由纯数字组成
    • 需要了解的操作(***)
      • 1、`find, rfind, index, rindex` : 查找字符串
      • 2.`count`: 统计字符出现的个数
      • 3.`center,ljust,rjust,zfill` : 字符对齐
      • 3、`expandtabs`: 可以指定Tab键的空格数
      • 4、`captalize,swapcase,title`: 大小写设置
      • 5、`is` 数字系列
        • `.isdigit(): bytes, unicode`类型的阿拉伯数字
        • `.isdecimal(): unicode`类型的阿拉伯数字
        • `.isnumberic(): unicode`类型的阿拉伯 \中文 \罗马数字
        • 结论:尽管用第一个.isdigit就行
      • 6、`is`其他系列
    • 四.总结

引入

前面**“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、成员运算innot 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 的三种玩法 : 字符串格式化

  • 字符串格式化的三种方式:点我进入
  • 以下是 .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 的高级玩法
    • 对齐
# 传入值左对齐, 共占"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

四.总结

  • 只能存一个值
  • 有序 (有索引的就是有序)
  • 不可变类型—>可 hash 类型

相关文章:

  • python之列表类型内置方法
  • python之元组类型内置方法
  • python之字典类型内置方法
  • python集合类型内置方法
  • python文件处理之编码字符
  • python文件处理
  • 函数的基本使用
  • python之迭代器
  • python之三元表达式、生成式、生成器表达式
  • 面向过程编程思想与匿名函数及其应用
  • python之函数递归与调用
  • python之二分法
  • python之json模块
  • python之pickle模块
  • python之time与datetime模块
  • [LeetCode] Wiggle Sort
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Angular 响应式表单 基础例子
  • AWS实战 - 利用IAM对S3做访问控制
  • HTTP请求重发
  • Java到底能干嘛?
  • Java多线程(4):使用线程池执行定时任务
  • Nacos系列:Nacos的Java SDK使用
  • Redis 懒删除(lazy free)简史
  • tensorflow学习笔记3——MNIST应用篇
  • vue-cli在webpack的配置文件探究
  • 从重复到重用
  • 计算机在识别图像时“看到”了什么?
  • 模型微调
  • 前端学习笔记之观察者模式
  • 如何合理的规划jvm性能调优
  • 微信公众号开发小记——5.python微信红包
  • 项目管理碎碎念系列之一:干系人管理
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​【已解决】npm install​卡主不动的情况
  • ​2020 年大前端技术趋势解读
  • ​MySQL主从复制一致性检测
  • ​secrets --- 生成管理密码的安全随机数​
  • ​什么是bug?bug的源头在哪里?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (02)Hive SQL编译成MapReduce任务的过程
  • (2)(2.10) LTM telemetry
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (pojstep1.3.1)1017(构造法模拟)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (七)Java对象在Hibernate持久化层的状态
  • (三)模仿学习-Action数据的模仿
  • (十)T检验-第一部分
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)