0
点赞
收藏
分享

微信扫一扫

python 开发 -- 12字符串类型内置方法


文章目录

  • ​​一.定义方式​​
  • ​​二.数据类型转换​​
  • ​​三.常用操作 + 内置方法​​
  • ​​🐼优先掌握的操作(*********)​​
  • ​​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 其他系列​​
  • ​​四.总结​​
  • ​​加上字符编码属性​​

一.定义方式

  • 每一个数据类型都自带一个制造的 “工厂”
  • 那么字符串类型的 “工厂” 就是​​str​

msg = 'abc'
# 背后的操作就是
msg = str("abc")

二.数据类型转换

  • ​str​​ 工厂可以把所有类型转成字符串类型

x = 111
y = 2.5
z = [111,222,333]
v = {"name":"mm"}
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)) # 11

4、成员运算 in 和 not in

  • 判断一个子字符在步子啊一个大字符串里面,in不in

msg="hello world"
# "in"
print("he" in msg)
print("h" in msg)

# "not in"
print(not 'mm' in msg)
print('mm' not in msg) # 推荐

5、移除空白 strip

  • 默认是左右两侧空格, 但可以指定符号
  • 也可以填多个符号, 一般用于用户输入

#  字符串左右两边有空白
name=" mm "
print(name.strip()) #mm
print(name) #" mm "原值并没有改变,产生的是新值

# 只去两边,不会去掉中间的,指定的是什么就去什么
name="** *eg*on***"
print(name.strip("*")) # *eg*on"

# 指定多个符号
x="*(-)=+abc=-)*/"
print(x.strip("*()-=+/")) # ABC

# 通常用于去掉用户手抖输入的空格
while True:
name = input("财政大权谁说了算>>> ").strip()
passwd = input("萍萍乖不乖啊 >>> ").strip()

if name == "萍萍" and passwd == '乖啊':
print("回答正确,萍萍管钱啊")
break
else:
print("重新回答")

6、切分 split

  • 把一个有规律的字符串按照某种分隔符进行切分
  • 并且是从左往右切, 得到的是一个列表

#  默认切分的分隔符是空格
info = 'mm age 18 sex male'
res = info.split()
print(res) # ['mm','age', '18','sex', 'male']

# 指定分隔符
info = 'mm:age:18:sex:male'
res = info.split(':')
print(res) # ['mm','age', '18','sex', 'male']

# 指定分隔次数
info = 'mm age 18 sex male'
res = info.split(':', 2) # 1表示从左边开始,只切分两次:
print(res) # ['mm','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="mm")
print(res) #my name is mm my age is 18

# 不放任何值, 让其按位置自动传值
res="my name is {} my age is {}".format(18,"mm")
print(res) #my name is 18 my age is mm

# 通过索引传值
res="my name is {0}{0}{0} my age is {1}{0}".format(18,"mm")
print(res) #my name is 181818 my age is mm18

  • format的高级玩法
  1. 对齐

#  传入值左对齐, 共占"10"的字符位置, 不足以"*"填充
res="my name is {0:*<10} my age is {1}".format(18,"mm")
print(res) #my name is 18******** my age is mm

# 传入值右对齐, 共占"10"的字符位置, 不足以"*"填充
res="my name is {0:*>10} my age is {1}".format(18,"mm")
print(res) #my name is ********18 my age is mm

# 传入值居中对齐, 共占"10"的字符位置, 不足以"*"填充
res="my name is {0:*^10} my age is {1:=^10}".format(18,"mm")
print(res) #my name is ****18**** my age is ==mm===

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 = 'mmnnn'
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 mm'.istitle()) #True

# 判断是否是空格
print(' '.isspace()) #True

# 判断是否是一个有效的标识符,数字开头就不合法
print('print'.isidentifier()) #True
print('123nt'.isidentifier()) #Flase

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

#  纯字母
a = 'mmHAHA'
print(a.isalpha()) # True

# 含汉字
a = 'mm哈哈哈'
print(a.isalpha()) # True

# 纯汉字
a = '哈哈哈'
print(a.isalpha()) # True

# 加上字符编码属性
a = 'sas哈哈哈'
print(a.encode("utf-8").isalpha()) # Flase

四.总结

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

x = "香香"
res =x.encode('gbk')
print(res)

# b'\xcf\xe3\xcf\xe3'


# 在python3中,只有在unciode格式的数字转成字符,其余的字符都不可以
==================================================================================

x = "香香"
res =x.encode('gbk')
print(res.decode('gbk'))

# 香香

a = ‘哈哈哈’
print(a.isalpha()) # True

加上字符编码属性

a = ‘sas哈哈哈’
print(a.encode(“utf-8”).isalpha()) # Flase


## 四.总结

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

```python
x = "香香"
res =x.encode('gbk')
print(res)

# b'\xcf\xe3\xcf\xe3'


# 在python3中,只有在unciode格式的数字转成字符,其余的字符都不可以
==================================================================================

x = "香香"
res =x.encode('gbk')
print(res.decode('gbk'))

# 香香


举报

相关推荐

0 条评论