本文章将作为博主对Python学习从基础开始的笔记与整理,也将自己的某些针对Python的理解分享出来有便于跟博主一样的大学新手一起学习和理解Python。
本文将更加详细的介绍字符串(String)的相关内容。
目录
字符串
字符串是不可变的
name = '哈哈'
name作为变量是可变的,但是'哈哈'是字符串,他的本身从我们输入起就无法再改变它的内容,我们能改变的只有给这个变量name赋予一个新的字符串比如'呵呵'。
拓展一下:
不可变数据:数字(Number),字符串(String),元组(Tuple)
可变数据:列表(List),字典(Dictionary),集合(Set)
1.索引
字符串是有序的字符序列
正索引:从0开始到[字符串的长度-1]
x i a o
---------->
0 1 2 3
负索引:从-1开始到[-字符产长度]
x i a o
<----------
-4 -3 -2 -1
2.拓展知识
字节:计算机常用存储单位byte,1byte=8bit
字符:单个数字,文字,符号
字符集:储存的字符与二进制的对应关系:A--65
编码:将字符转换成计算机识别的二进制数字 ord()
解码:计算机识别的二进制数字转换成字符 chr()
3.切片
切片可以算是索引的更加深层次的应用,也是在字符串的使用中较为重要的部分。切片最重要的前提就是一定要是有序的字符串。
1)根据索引获得指定字符
score = '零一二三四五六七八九'
print(f'score[2]:{score[2]}')
这个用法很简单,记得正索引的时候是从0开始编号的就好。
2)获得部分字符串
[起始索引:结束索引:步长]
同样的取得到起始索引,取不到结束索引,默认步长为1
score = '零一二三四五六七八九'
print(f'score[1: 5: 1]:{score[1: 5: 1]}')
print(f'score[1: 5: 2]:{score[1: 5: 2]}')
print(f'score[-1: -5: -1]:{score[-1: -5: -1]}')
print(f'score[-5: -1: 1]:{score[-5: -1: 1]}')
print(f'score[-3: 3: 1]:{score[-3: 3: 1]}')
print(f'score[-3: 3: -1]:{score[-3: 3: -1]}')
我们在这里同样可以分为正序索引和逆序索引,像上面的代码一样。需要注意,[起始索引:结束索引:步长]三个元素一定要构成一个封闭的范围,也就是起始索引根据步长一定要能到达结束索引。
能注意到这里出现了一个问题,当范围[-3: 3: 1]时并没有输出结果,这就是因为此时的起始索引没能到达结束指引。不是因为正负之间不能存在交叉,可以看下面的[-3: 3: -1]范围是成功输出了的,这是因为在我们字符串score中‘零’和‘九’就是这个字符串的头和尾了,当索引到这两个位置的时候就将要停止了,没有办法从尾向后直接跳回头部或者从头部跳到尾部,但如果没有到头仍是连续的,那么正负是可以交叉的,下面画图来加深一下理解:
字符串常见函数
1.大小写
capitalize():将字符串改为首字母大写
isupper():判断字符串是否都是大写
islower():判断字符串是否都是小写
upper():将字符串改为全部都是大写
lower():将字符串改为全部都是小写
拓展一个:
isalpha():判断字符串是否是一个中英文
name = 'xIAO'
print(f'首字母大写:{name.capitalize()}')
print(name)#-->证明字符串不可变
print(f'是否大写:{name.isupper()}')
print(f'是否小写:{name.islower()}')
print(f'大写:{name.upper()}')
print(f'小写:{name.lower()}')
print(f'是否是一个中英文:{name.isalpha()}')
这里提醒一点,那就是字符串本身是不可变的。在上面的代码中可以看到,我们的函数并没有对原本字符串进行改变,我们所打印的内容是对应新的一个id的储存内容。
2.去空格
去左边空格:lstrip()
去右边空格:rstrip()
去两边空格:strip()
name = ' xiao '
print(f'去左边空格:{name.lstrip()}')
print(f'去右边空格:{name.rstrip()}')
print(f'去两边空格:{name.strip()}')
3.查找
查找是一个非常重要的功能,你可以利用查找去判断是否包含某些内容。
1)find()函数
find(sub, start, end) 找出字串首次出现的索引值
sub:连续的自串 start:开始的索引
end:结束的索引--->默认整个子串
-1表示在目标范围内未找到,注意start能取到但end的位置无法被取到
name = 'my name is xiao'
print(f'查找”xiao“:{name.find("xiao")}')
2)index()函数
index(sub, start, end)
index()函数在各个用法上以及输出上和find是完全一样的,但要注意的是,如果需要查找的内容并不在范围中的话,index()函数会导致报错,而find()函数不会。
name = 'my name is xiao'A
print(f'查找”xiao“:{name.index("brian")}')
3)count()函数
count(x, start, end) 返回当前字符串出现x的个数
name = 'my name is xiao'
print(f'出现‘m’的次数:{name.count("m")}')
4)replace()函数
replace(需要被替换的字串,替换的内容,替换几个)
默认-1为替换全部
name = 'my name is xiao'
print(f'替换所有的m:{name.replace("m", "!", -1)}')
4.分隔与合并
分隔:split(sep, maxsplit)
sep:以什么来分隔
maxsplit:分隔的次数
adress = '成都-重庆-北京-上海' print(f'分隔:{adress.split("-")}')
分隔出的内容会以逗号隔开,你可以把它们放入列表。
合并:想并入的内容.join(被并入的内容)
可以连接字符串,列表,元组,字典
print(f"合并:{'$'.join('xiao')}")
他会在每个字符之间都加入合并的内容。
5.排版
居中对齐:center(内容长度,补充内容)
居左对齐:ljust(内容长度,补充内容)
居右对齐:rjust(内容长度,补充内容)
内容长度:你所希望的这一排总共有多少个字符
补充内容:当你的居中内容不够你的希望长度时,没有内容处用什么来填充
name = 'xiao'
print(f'居中对齐,10个长度,不足用*号补齐:{name.center(10, "*")}')
print(f'居左对齐,8个长度,不足用*号补齐:{name.ljust(8, "*")}')
print(f'居右对齐,10个长度,不足用!号补齐:{name.rjust(10, "!")}')
6.小技巧
1)字符串是可以使用拼接和增强运算符的
不是只有数字才可以使用运算,字符串也可以通过一些运算符来简便我们的操作。
print('#' * 10)
name = 'xiao'
name += '123'
print(name)
2)in/not in判断字串存在
当我们想简单的查找某些字符串是否在范围内时,也可以直接使用in/not in来快速判断。
if 'x' in name:
print('x在name里')
3)is 和 == 的区分
a is b -> 先比较内容,再比较id
a == b -> 只比较内容
也就是说,如果使用is,那么此时的a和b必须要内容和id都一样,而==的话只要内容一样就可以。例如is不管要看两个人的名字相同,还需要确定身份证号相同才判断是一个人,但==只看名字是否相同就判断两人是否是同一人。