一、python中的字符串:
字符串到底是什么呢:
在python中字符串是基本数据类型,
是一个不可变的字符序列
1.代码如下:
示例:
a='hello,hello'
print(a.index('lo'))
print(a.find('lo'))
print(a.rindex('lo'))
print(a.rfind('lo'))
print('-----------字符串大小写转换-------------------')
print("-----------upper小写转换成大写------------")
a1='hello world'
a2=a1.upper()
print(a1)
print(a2)
print("----------------lower大写转换成小写-------------------------")
a3="HELLO WORLD"
a4=a3.lower()
print(a3)
print(a4)
print('---------------swapcase将大写转换成小写,将小写转换成大写------------------')
a5="HELLO"
a6=a5.swapcase()
print(a5)
print(a6)
print('------------------------')
a7='hello'
a8=a7.swapcase()
print(a7)
print(a8)
print('-------------capitalize():把第一个字符转换成大写,把其余字符转换成小写--------------------')
q1="hello WORLD"
q2=q1.capitalize()
print(q1)
print(q2)
print('-------title-----------------')
q3='hELLO'
q4=q3.title()
print(q3)
print(q4)
print('------------字符串的对齐方式--------------')
q5='helloworld'
print('---------居中对齐------------')
print(q5.center(20,'*'))
print('------------左对齐---------')
print(q5.ljust(20,'*'))
print('-----------右对齐----------')
print(q5.rjust(20,"*"))
print('-----------右对齐,用0填充----------')
print(q5.zfill(20))
print('----------字符串的分割------------------')
print('--------从左边开始分割-----------')
s1='hello|world|python'
print(s1.split(sep='|',maxsplit=1))
print('-----------从右边开始分割------------------')
print(s1.rsplit(sep="|",maxsplit=1))
print('---------------字符串的判断----------------------')
s2="hello,world"
print('1.',s2.isidentifier())
print('2.','hello'.isidentifier())
print('3.','张三_'.isidentifier())
print('4.','张三_123'.isidentifier())
print('5.','\t'.isspace())
print('6.','abc'.isalpha())
print('7.','张三'.isalpha())
print('8.','张三1'.isalpha())
print('9.','123'.isdecimal())
print('10.','123四'.isdecimal())
print('11.','123'.isnumeric())
print('12.','123四'.isnumeric())
print('13.','abc111'.isalnum())
print('14.','张三111'.isalnum())
print('15.','abc111!!!'.isalnum())
print('--------------字符串的替换----------------------')
s3='hello,python'
print(s3)
print(s3.replace('python','java'))
s4='hello,python,python,python'
print(s4)
print(s4.replace('python','java',2))
print('------------字符串的合并------------------------------')
lst=['hello','world','python']
print('|'.join(lst))
print("".join(lst))
yuanzu=("hello",'world')
print(''.join(yuanzu))
print("*".join("python"))
print('apple'>'app')
print('apple'>'banana')
print(ord("a"),ord("b"))
print(chr(97),chr(98))
print('------------切片--------------------')
z1='hello,world'
z2=z1[:5]
z3=z1[6:]
z4='!'
newz=z2+z4+z3
print(z2)
print(z3)
print(newz)
print('---------字符串的格式化-----------------')
print('%作为占位符')
name='张三'
age=18
print('我叫%s,今年%d岁'%(name,age))
print('{}作为占位符')
print('我叫{0},今年{1}岁'.format(name,age))
print('f-string作为占位符')
print(f'我叫{name},今年{age}岁')
print('------------字符串的编码----------------------')
z5='天涯共此时'
print(z5.encode(encoding='GBK'))#在GBK中:一个中文站两个字节
print(z5.encode(encoding='UTF-8'))#在UTF-8中:一个中文站三个字节
print('-------------字符串的解码-----------')
#byte代表就是一个二进制数据(字节类型的数据)
byte=z5.encode(encoding="GBK")
print(byte.decode(encoding="GBK"))
2.运行结果:
示例:
3
3
9
9
-----------字符串大小写转换-------------------
-----------upper小写转换成大写------------
hello world
HELLO WORLD
----------------lower大写转换成小写-------------------------
HELLO WORLD
hello world
---------------swapcase将大写转换成小写,将小写转换成大写------------------
HELLO
hello
------------------------
hello
HELLO
-------------capitalize():把第一个字符转换成大写,把其余字符转换成小写--------------------
hello WORLD
Hello world
-------title-----------------
hELLO
Hello
------------字符串的对齐方式--------------
---------居中对齐------------
*****helloworld*****
------------左对齐---------
helloworld**********
-----------右对齐----------
**********helloworld
-----------右对齐,用0填充----------
0000000000helloworld
----------字符串的分割------------------
--------从左边开始分割-----------
['hello', 'world|python']
-----------从右边开始分割------------------
['hello|world', 'python']
---------------字符串的判断----------------------
1. False
2. True
3. True
4. True
5. True
6. True
7. True
8. False
9. True
10. False
11. True
12. True
13. True
14. True
15. False
--------------字符串的替换----------------------
hello,python
hello,java
hello,python,python,python
hello,java,java,python
------------字符串的合并------------------------------
hello|world|python
helloworldpython
helloworld
p*y*t*h*o*n
True
False
97 98
a b
------------切片--------------------
hello
world
hello!world
---------字符串的格式化-----------------
%作为占位符
我叫张三,今年18岁
{}作为占位符
我叫张三,今年18岁
f-string作为占位符
我叫张三,今年18岁
------------字符串的编码----------------------
b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'
b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'
-------------字符串的解码-----------
天涯共此时
进程已结束,退出代码为 0
总结:
提示:这里对文章进行总结:
字符串的驻留机制:
仅保存一份相同且不可变字符串的方法,不能的值被存放在字符串的驻留池中,
python的驻留机制对相同的字符串只保留一份拷贝,后创建相同字符串时,
不会开辟新空间,而是把该字符串的地址赋给新创建的变量
a='python'
b=“python”
c='''python'''
a b c ==》python
滞留机制的几种情况(交互模式)
字符串的长度为0或者1时
符合标识符的字符串
字符串只在编译时进行驻留,而非运行时
[-5,256]之间的整数数字
sys中的intern方法强制2个字符串指向同一个对象
pycharm对字符串进行了优化处理
字符串驻留机制的优缺点:
当需要值相同的字符串时,可以直接从字符串池里拿出来使用,避免频繁的创建和销毁,
提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的
在需要进行字符串拼接时建议使用 str类型的join方法,而非+
因为join()方法是先计算出所有字符串中的长度,然后在拷贝,只new一次对象
效果要比+效率高
字符串的常用操作:
查询方法:
index():查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出valueerror
rindex():查找子串substr最后一次出现的位置,如果查找的子串不存在,则抛出valueerror
find():查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1
rfind():查找子串substr最后一次出现的位置,如果查找的子串不存在,则返回-1
大小写转换操作:
upper():把字符串中所有字符都转成大写字母
lower():把字符串中所有字符都转成小写字母
swapcase():把字符串中所有大写字母转成小写字母,把所有小写字母转成大写字母
capitalize():把第一个字符转换成大写,把其余字符转换成小写
title():把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换成小写
字符串对齐:
center():居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,
默认是空格,如果设置宽度小于实际宽度则返回原字符串
ljust():左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,
默认是空格,如果设置宽度小于实际宽度则返回原字符串
rjust():右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,
默认是空格,如果设置宽度小于实际宽度则返回原字符串
zfill():右对齐,左边用0填充,该方法只接受一个参数,用于指定字符串的宽度,
如果指定的宽度小于等于字符串的长度,返回字符串本身
字符串的分割:
split():
从字符串的左边开始分割,默认的分割字符串是空格字符串,返回的值是一个列表
以通过参数sep指定分割字符串是的分隔符
通过参数maxsplit指定凤娥字符串时的最大分割次数,在经过最大分割后,
剩余的子串会单独作为一部分
rsolit():从字符串的右边开始分割,默认的分割字符串是空格字符串,返回的值是一个列表
以通过参数sep指定分割字符串是的分隔符
通过参数maxsplit指定凤娥字符串时的最大分割次数,在经过最大分割后,
剩余的子串会单独作为一部分
字符串的判断:
isideentifier():判断指定字符串是不是合法的标识符
isspace():判断指定字符串是否全部由空白字符组成(回车,换行,水平制表符)
isalpha():判断指定字符串是否全部由字母组成
isdecimal():判断指定字符串是否全部由十进制的数字组成
isnumeric():判断指定字符串是否全部由字母组成
isalnum():判断指定字符串是否全部由字母和数字组成
字符串的替换 合并:
replace():第一个参数指定被替换的子串,第二个参数指定替换字串的字符串,
该方法返回替换后得到的字符串,替换前的字符串不发生变化,
调用该方法时,可以通过第三个参数指定最大替换次数
join():将列表或元组中的字符串合并成一个字符串
字符串的比较:
运算符:> >= <= == !=
比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去
直到俩个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,
两个字符串中的所有后续字符将不在被比较
比较原理:两个字符进行比较时,比较的是其ordinal value(原始值)
调用内置函数ord可以得到指定字符的ordinal value
与内置函数ord对应的是内置函数chr,
调用内置函数chr时指定ordinal value可以得到其对应的字符
注意:
== : 比较的value
is : 比较的id
字符串的切片:
字符串是不可变类型:
不具备增 删 改等操作
切片操作将产生新的对象
字符串的格式化:
%作为占位符:
%s 字符串
%d/%i 整数
%f 浮点数
{}作为占位符:
{0} format(name)
字符串的编码转换
为什么需要字符串的编码转换:
a计算机将str在内存中以Unicode表示=编码=》byte字节传输=解码=>b计算机显示
编码与解码:
编码:将字符串转换成二进制数据byte
解码:将byte类型的数据转换成字符串类型