Python中的字符串介绍(上)

Python
505
0
0
2022-11-18
标签   Python基础

上一章介绍了python中的关键字、变量、输入输出、注释、还有数据类型等概念,接下来这篇文章主要介绍python中字符串的相关笔记。文章只按照我自己觉得重点的知识点去列举,不会列举特别细致的点。

字符串定义:成对的单引号或者是成对的双引号、三引号括起来的字符内容。

字符串索引:字符串里面的每个字母都是有索引的,索引也就是每个字符对应的位置,那么索引的顺序有2种:

正序:从左到右索引默认0开始的,最大范围是字符串长度少1

反序:从右到左索引默认-1开始的,最大范围是字符串开头

字符串转义

img

可以使用反斜杠来转义,比如\n表示换行,\t表示制表符,使用r可以让反斜杠不发生转义。

a = "hello\tworld"
b = r"hello\tworld"
分别打印a和b的值:
hello  world 
hello\tworld

字符串的连接和重复

字符串可以使用+进行拼接

可以使用*号打印重复字符串

a = 'ac'
b = 'ad'
print(a+b)
print(a*3)

字符串的值不能被改变,不能直接更改字符串的某一字符的值

比如,定义了一个字符串,name='小博',尝试去改字符串的第一个字符的时候,name[0]='李' ,执行是会报TypeError: 'str' object does not support item assignment错的,说明,字符串的值是不允许进行更改的。

那么,为什么对字符串变量重新赋值又不会报错呢?使用name=‘'xxx' 实际上是指向了一个新的字符串。

可以使用id()函数验证一下效果:

name = 'xiaobo'
print(id(name))
name = 'libo'
print(id(name))
打印出来的id是不一样的

虽然不能直接修改,但是可以间接修改字符串的值,得到一个新字符串:

name = '小博'
print(id(name))
name1=name.replace('小','李')
print(id(name1))
但是打印出来的id值是完全不一样的

字符串截取(切片)

一个完整的切片表达式:str[start_index:end_index:step]

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。

start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引对应值,即类似于数学里面的开区间);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

name = 'hello world'
print(name[0:5:1], name[:5:]) #hello hello
print(name[::]) #hello world
print(name[::-1]) #dlrow olleh

判断字符串是否满足某种格式要求

print('123'.isdigit())#为纯数字返回True,否则返回False
print('NAME'.isupper())#为纯大写字母返回True,否则返回False
print('name'.islower())#为纯小写字母返回True,否则返回False
print(' '.isspace())#为纯空格时返回True,否则返回False
print('sdfjklsdjkflsdjl'.isalpha())#为纯字母时返回True,否则返回False
print('sadsfj23423423'.isalnum())#为字母或数字时返回Ture,否则返回False
以上是python提供的一些现成的方法,其他格式校验可以采用正则表达式

使用场景:

1、以后做项目的时候,做一些输入校验,比如校验密码只能是字母或数字,如果符合要求打印True,不符合要求打印False

字符串的打印

使用%进行格式化输出:

print("my name is %s" % ("xiaobo"))
print("my name is %.2s" % ("xiaobo"))  # 字符串截取  %.2s 保留2个长度的字符串
print("my age is %d" % (29.2))  # 输出整数 %d
print("my salaly is %f" % (29))  # 输出浮点数  %f
print("my height is %f m" % (1.73))
print("my height is %.2f m" % (1.73))  # 指定输出小数点位数 %.3f (保留到小数点后3位)
输出的结果分别对应如下:
my name is xiaobo
my name is xi
my age is 29
my salaly is 29.000000
my height is 1.730000 m
my height is 1.73 m

使用format函数进行格式化输出:

相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’。

使用方法:

  • 不指定序号,自动去匹配{}{}
  • 指定序号去匹配{0}{1}
  • 指定同一个序号去匹配{1}{1}
  • 指定序号+格式化输出去匹配{0:d}{1:.2f},要注意序号与冒号之间不能有空格
  • 指定key的方式去匹配{name}{age}
  • 指定key+格式化输出去匹配{0:d}{1:.2f},要注意key与冒号之间不能有空格

使用案例:

print("my name is {},age is {}".format("xiaobo", 29))
print("my name is {0},age is {0}".format("xiaobo", 29))
print("my name is {0},age is {1}".format("xiaobo", 29))
print("my name is {0},age is {1},height is {2:.2f}".format("xiaobo", 29, 173))
print("my name is {name},age is {age},height is {height:.2f}".format(height=173, age=29, name="xiaobo"))
print("my name is {name:s},age is {age:d},height is {height:.3f}".format(height=173, age=29, name="xiaobo"))
分别对应输出如下:
my name is xiaobo,age is 29
my name is xiaobo,age is xiaobo
my name is xiaobo,age is 29
my name is xiaobo,age is 29,height is 173.00
my name is xiaobo,age is 29,height is 173.00
my name is xiaobo,age is 29,height is 173.000

字符串的格式化控制符及其说明如下表所示。格式化控制符位于占位符索引或占位符名字的后面,之间用冒号分 隔,语法:{参数序号:格式控制符}或{参数名:格式控制符}。

字符串的格式化控制符及其说明如下表所示:

img

更多精彩内容,可以通过点击公众号菜单或者进入群聊,跟小伙伴一起交流学习哟。