目录
(3) swapcase()字符串原有大写转化为小写,原来小写转化为大写
(4)capitalize()把第一个字符转化为大写,其余转化为小写
(5)title() 把每个单词的第一个字符转化为大写,每个单词剩下的转化为小写。
(1)center()居中对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格
(2) ljust()左对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格
(3)rjust()右对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格
(4)zfill() 右对齐,左边用0填充,只接受一个参数,用于指定字符串长度
一、字符串的本质是:字符序列。
Python的字符串是不可变的,我们无法对原字符串做任何修改。
但是我们可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。
Python不支持单字符类型,单字符也是作为一个字符串使用的。
二、什么是字符串,字符串的创建
通过单引号或双引号创建字符串。
例如:a=’xiaoli’; b=”250”
使用两种引号的好处是可以创建本身就包含引号的字符串,而不用使用转义字符。例如:
a = "I'm a student!"
print(a)
I'm a student!
b = 'my_name is "xiaoli"'
print(b)
my_name is "xiaoli"
连续三个单引号或三个双引号,可以帮助我们创建多行字符串。例如:
>>> resume = ''' name="xiaoli"
company="sxt" age=18
lover="小李"'''
>>> print(resume)
name="xiaoli"
company="sxt" age=18
lover="小李"
这些就是字符串
三、字符串的查询
index() | 查询字符串第一次出现的位置,若不存在,则返回ValueError |
rindex() | 查询字符串最后一次出现的位置,若不存在,则返回ValueError |
find() | 查询字符串第一次出现的位置,若不存在,则返回-1 |
rfind() | 查询字符串最后一次出现的位置,若不存在,则返回-1 |
这俩组方法异曲同工,但是最后返回的结果不一样
(1)index()
下面看题看实例:
# index()
s='wo,shi,lao,liu,wo'
print(s.index("wo"))
print(s.rindex("wo"))
这是可以查询到的,里面的字符串则是从0开始,往后排,(,)也算一个位置哦
下面我们看看不存在的
# index()
s='wo,shi,lao,liu,wo'
print(s.index("wo"))
print(s.rindex("wp"))
不存在返回的便是ValueError
(2)find()
而find和(rfind)也是同样的用法,我们这儿就直接上查询不到的
# find()
s='wo,shi,lao,liu,wo'
print(s.find("wo"))
print(s.rfind("wp"))
结果如如下,在第二个查询wp最后一次出现的位置时,字符串里是没有出现wp的,但没有报错,而是返回了-1
四、字符串的转化
upper() | 把字符串全部转化为大写字母 |
lower() | 把字符串全部转化为小写字母 |
swapcase() | 字符串原有大写转化为小写,原来小写转化为大写 |
capitalize() | 把第一个字符转化为大写,其余转化为小写 |
title() | 把每个单词的第一个字符转化为大写,每个单词剩下的转化为小写。 |
(1)upper() 把字符串全部转化为大写字母
用法:
s='wo,shi,lao,liu,wo' print(s.upper())
(2)lower()把字符串全部转化为小写字母
用法:
s=‘WO,SHI,LAO,LIU,WO’
print(s.lower())
(3) swapcase()字符串原有大写转化为小写,原来小写转化为大写
s='wo,shi,LAO,LIU,wO' print(s.swapcase())
(4)capitalize()把第一个字符转化为大写,其余转化为小写
s='wo,shi,LAO,LIU,wO' print(s.capitalize())
(5)title() 把每个单词的第一个字符转化为大写,每个单词剩下的转化为小写。
s='wo,shi,LAO,LIU,wO'
print(s.title())
五、字符串内对齐的方法
(1)这是字符串格式的对齐的方式
数字 | 格式 | 输出 | 描述 |
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | 3.14 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00E+09 | 指数记法 |
13 | {:10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
(2)字符串函数对齐的方式
center() | 居中对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格 |
ljust() | 左对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格 |
rjust() | 右对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格 |
zfill() | 右对齐,左边用0填充,只接受一个参数,用于指定字符串长度 |
(1)center()居中对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格
'居中对齐' s1="2522000" print(s1.center(11,'*'))
(2) ljust()左对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格
'左对齐' s1="2522000" print(s1.ljust(11,'*'))
(3)rjust()右对齐,第一个参数表示指定宽度,第二个参数表示填充符号,如无则默认空格
'右对齐' s1="2522000" print(s1.rjust(11,'*'))
(4)zfill() 右对齐,左边用0填充,只接受一个参数,用于指定字符串长度
'右对齐' s1="2522111" print(s1.zfill(11))
为了更加直观,我这儿将s1的字串串的000换为了111
六、字符串的劈分
(1)fplit() 从字符串的左边开始劈分
- 默认的劈分符号是空格字符串,返回的是列表
- 通过参数sep指定劈分字符串是劈分符
- 通过第二个参数指定劈分的次数
s2="wo shi lao liu" print(s2.split())
无指定,则以空格为劈分符号,返回列表
s2="wo-shi-lao-liu" print(s2.split(sep="-",maxsplit=2))
指定劈分符号为:- 劈分次数是俩次
我们看看不指定劈分次数是什么样子的
s2="wo-shi-lao-liu" print(s2.split(sep="-"))
(2)rsplit()从右边劈分字符串
- 默认的劈分符号是空格字符串,返回的是列表
- 通过参数sep指定劈分字符串是劈分符
- 通过第二个参数指定劈分的次数
大致和上面split()是一样的,就是劈分的时候是从右边开始的,只影响第三种,通过劈分次数劈分的字符串。
s2="wo-shi-lao-liu" print(s2.raplit(sep="-",maxsplit=2))
七、判断字符串操作的方法
isidentidier() | 判断字符串是否为合法标识(数字,下划线,字母组成) |
isspace() | 判断字符串是否由空白字符组成(回车,换行,水平制表符) |
isalpha() | 判断字符串是否全由字母组成 |
isdecimal() | 判断字符串是否为全由十进制组成 |
isnameric() | 判断字符串是否为全部为数字组成(大写,小写,罗马数字) |
isalnum() | 判断字符串是否为全由数字,字母组成 |
现在演示一下其中一个,剩下的套进去就好
s1="20,54,874,45,15231,13"
print(s1.isalpha())
八、字符串的替换
(1)repalce()字符串替换
第一个参数指定被替换的字串,第二个参数指定替换字串的字符中,最后返回替换后的字符串,替换前的字符串不发生变换,调用这种方法第三个参数,则为最大的替换次数。
s="hello,xiaoli" print(s.replace("xiaoli","xiaohua")) print(s)
可以看到将xiaoli转化为了xiaohua,但是输出原来的s,是没有发生变化的
s="hello,xiaoli,xiaoli,xiaoli" print(s.replace("xiaoli","xiaohua",2)) print(s)
可以看到,前面的俩个xiaoli已经被转化成xiaohua,但是最后一个没有被转化
(2)join()字符串合并
将列表和元组中的元素,合并成一个字符串
lst=["hello","python","xiaoli"] print("--".join(lst))
九、格式化字符串
有一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
- %s:代表字符串
- %i或%d:表示整数
- %f:表示浮点数
函数可以接受不限个参数,位置可以不按顺序。
我们通过示例进行格式化的学习。
a = "名字是:{0},年龄是:{1}" >>> a.format("小李",18) '名字是:小李,年龄是:18' >>> a.format("小花",6) '名字是:小花,年龄是:6' >>> b = "名字是:{0},年龄是{1}。{0}是个好小伙" >>> b.format("小李",18) '名字是:小李,年龄是18。小李是个好小伙' >>> c = "名字是{name},年龄是{age}" >>> c.format(age=19,name='小凯') '名字是小凯,年龄是19' |
我们可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化,非常方便。
也可以输出的时候这样
print("%10d" % 99)
输出的结果是_ _ _ _ _ _ _ _ _ _ 99
print("%.3f" % 3.14159266)
输出的结果为:3.142
十、字符串切片
切片slice操作可以让我们快速的提取子字符串。标准格式为:
[起始偏移量start:终止偏移量end:步长step]
典型操作(三个量为正数的情况)如下:
操作和说明 | 示例 | 结果 |
[:] 提取整个字符串 | “abcdef”[:] | “abcdef” |
[start:]从start索引开始到结尾 | “abcdef”[2:] | “cdef” |
[:end]从头开始知道end-1 | “abcdef”[:2] | “ab” |
[start:end]从start到end-1 | “abcdef”[2:4] | “cd” |
[start:end:step]从start提取到end-1,步长是step | “abcdef”[1:5:2] | “bd” |
其他操作(三个量为负数)的情况:
示例 | 说明 | 结果 |
"abtuvwxyz"[-3:] | 倒数三个 | “xyz” |
"abpqrstuvwxyz"[-8:-3] | 倒数第八个到倒数第三个(包头不包尾) | 'stuvw' |
"rstuvwxyz"[::-1] | 步长为负,从右到左反向提取 | 'zyxwvutsr' |
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。
起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成-1。例如:
"abcdefg"[3:50]
'defg'
我们发现正常输出了结果,没有报错。
【操作】
- 将”to be or not to be”字符串倒序输出
- 将”sxtsxtsxtsxtsxt”字符串中所有的s输出
十一、编码和解码
(1)编码
Python直接支持Unicode,可以表示世界上任何书面语言的字符。
Python的字符默认就是16位Unicode编码,ASCII码是Unicode编码的子集。
使用内置函数ord()可以把字符转换成对应的Unicode码;
使用内置函数chr()可以把十进制数字转换成对应的字符。
ord('A')
65
ord('李')
26446
chr(66)
'B'
ord('奇')
22855
(2) 解码
s="小李喜欢打python"
byte = s.encode(encoding="GBK") # 这是在编码 "GBK"是汉字编码标准之一,还有的是"UTF-8"
print(byte.decode(encoding='GBK')) #解码
s="小李喜欢打python"
byte = s.encode(encoding="GBK")
print(byte)
print(byte.decode(encoding='GBK'))
原创不易,各位读者大大,请点赞,给作者加加动力!!!!