Python中的“四大才子”(字符串列表字典集合)

Posted Mr_Xia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的“四大才子”(字符串列表字典集合)相关的知识,希望对你有一定的参考价值。

前戏:在python中把数据序列分为可变(mutable)和不可变(immutable)两种

          不可变:string、int、float、tuple  

          特点:相同对象只是占用一个内存地址,不管有多少个变量引用它,例如a=1,b=1

                    由于是不可变的,每次必须创建新的对象,之前不用的对象如果没有引用指向它,Python垃圾回收机制会自动清理掉

        

          可变:list、dict

          特点:相同对象,每次引用它都会在内存中开辟一块新地址来保存它,但是当我们对他的值进行操作时,内存地址是不会发生变化的

         

总结:python中不可变数据类型一旦对变量的值进行改变,相当于重新建立一个对象,所以内存地址也会发生改变;

          可变数据类型变量的值是可以改变的不会引起内存地址的变化,但是如果值被多个变量引用的话,每个变量都会开辟一块地址

一、字符串(string)

1、str的切片

 1 name="hello word,abcdefgWX!!!"
str[::]读取操作
2 print(name[0],name[1])

capitalize(self)方法,首字母大写
3 print(name.capitalize())#打印Hello word,wx开头首字母大写,其余小写
casefold(self)大写转小写

4
print(name.casefold())#把字符串大写转成小写 5 # casefold() 方法是Python3.3版本之后引入的,其效果和 lower() 方法非常相似, 6 # 都可以转换字符串中所有大写字符为小写。 7 # 两者的区别是:lower() 方法只对ASCII编码,也就是‘A-Z’有效 8 # 对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法。

center(width,"") 9 print(name.center(20,"*"))#把字符串居中,width=20字符串的总宽度 fillchar 填充字符 10 # name.center(self,width,fillchar)

count(sub,start,end) 11 print(name.count("l"))#统计字符串中字符出现的次数,也可以指定位置 默认从0到最后 12 print(name.count("d",0,15))#1count(sub,start,end) 13 print(name[0:15].count("d"))#2

encode("utf-8")字符串转成bytes 14 print(name.encode().decode()) #字符转成字节byte类型

endswith(sub,start,end)、startswith(sub,start,end) 15 print(name.endswith("!!!")) #判断是否以指定字符结尾 返回bool值,也可指定位置判断 16 print(name.endswith("rd",0,10))#end=10 不包括10 到第9位 17 print(name[:10],name[:10].endswith("rd"))
55 print(h.startswith("h")) #判断一指定字符开头
56 print(h.startswith("h",0,2))

expandtabs(tabzise)把字符串中的 tab 符号(\'\\t\')转为空格 19 # Python expandtabs() 方法把字符串中的 tab 符号(\'\\t\')转为空格, 20 # tab 符号(\'\\t\')默认的空格数是 8。 21 name2="abc\\tqwer" 22 print(name2.expandtabs())#默认tabsize=8,从字符串0开始数到\\t位置补5个空格 23 print(name2.expandtabs(16))

find(self,sub,start,end)查找元素位置,返回索引值,不存在返回-1 25 print(name.find("l")) #查找字符串元素位置,返回索引值,查不到返回-1 26 print(name.find("l",3,5))#指定查找范围

index(sub,start,end)、rindex() 27 print(name.index("l")) #输出索引值 28 print(name.index("o",2,9))#指定范围
27 print(str1.rindex("D",2,11))#从最右边开始找某个字符,输出索引值

isalnum()、isnumeric() 29 a="1223wew" 30 print(a.isalnum()) #判断是否包含数字
41 print(name.isnumeric());#判断是否有纯数字组成

isalpha() 31 b="sadsd" 32 print(b.isalpha())#检查字符串是否为纯字母

isdecimal() 是否为十进制字符 33 c=u"132323" 34 print(c.isdecimal())#是否只是包含十进制字符 35 c2=u"asdd3232" 36 print(c2.isdecimal())

isidentifier()
37 print(name.isidentifier()) #判断字符串是否已字母开头 38 print(a.isdigit() #检查是否为纯数字

find()、rfind()查找元素,output索引值 39 c="adsdsd8989" 40 print(c.find("w"))
26 print(str1.rfind("D",2,11))#从最右边开始找某个字符,输出索引值

isprintable() 42 print(name.isprintable()) #判断是否可打印字符串

istitle() 43 print(name.istitle());#判断字符串是否为一个标题

isupper()、islower() 44 print(name.isupper())#判断字符串是否都是大写
print(name.islower())#判断字符串是否都为小写

isspace() 45 print(name.isspace())#字符串是否只由空格组成

 

join(),将字符串用指定字符生成新的字符串
1
a=("h","l","l") 2 b="k" 3 c="nihao" 4 print(b.join(c)) #将字符串用指定的字符链接成新的字符串
output"nkikhkako"
5 print(b.join(a))
output"hklkl"

just(width,"")对齐
6 print(c.ljust(20,"_"))#字符串左对齐,指定20宽度,后边以_填充 7 print(c.rjust(20,"-"))

maketrans(oldsub,newsub)、translate(sub)
8 c1=c.maketrans("n","@") #将字符串某个字符用指定元素代替 与translate结合使用 9 print(c.translate(c1)) #解密
output:"@ihao"

upper()转大写、lower()转小写 10 str1="ASADSASDsadsD1" 11 print(str1.lower()) #转成小写 12 print(str1.upper()) #转成大写
partition(sub)指定字符分割,返回一个元组类型 14 # partition() 方法用来根据指定的分隔符将字符串进行分割。 15 # 如果字符串包含指定的分隔符,则返回一个3元的元组, 16 # 第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。 17 print(str1.partition("D"))
output:("ASA","D","SASDsadsD1")
18 print(str1.rpartition("D")) #从右往左找字符串开始分割
output:(\'ASADSASDsads\', \'D\', \'1\')

replace()字符串替换 20 # replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串) 21 # 如果指定第三个参数max,则替换不超过 max 次。 22 # str.replace(old, new[, max]) 23 #可以用来改字符串内容 24 print(str1.replace("A",2)) #指定替换成几个,默认全都替换,
tite()转换成标题 28 e="sd dsd 23 dsd " 29 print(e.title())#转换成标题
output:"Sd Dsd 23 Dsd "

split(sub,num)、rsplit()返回一个列表 31 # split(sub,num)通过指定分隔符对字符串进行切片,对指定分割符为空值代替 32 # 如果参数num 有指定值,则仅分隔 num 个子字符串 33 f="hellowordlll23" 34 print(f.split("l",2))#分割2个l
output:["he","","oword1ll23"]
35 print(f.rsplit("l",2))#从右找指定字符开始分割
output:["hellowordl","","l23"]

strip()移除字符串头尾指定的字符(默认为空格)。 37 # Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。 38 # strip()方法语法: 39 # str.strip([chars]); 40 g=" sdsd32,dad sad $" 41 h="helloh" 42 print(g.strip()) 43 print(g.strip("$").strip()) 44 print(h.strip("h")) 45 h1="ohelloo" 46 print(h1.rstrip("o"))#去掉字符串最右边的字符
spliitlines(keepends) 48 #Python splitlines() 按照行(\'\\r\', \'\\r\\n\', \\n\')分隔, 49 # 返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符, 50 # 如果为 True,则保留换行符。最终返回一个列表 51 h2="sas\\nsad\\rsads" 52 print(h2.splitlines()) 53 print(h2.splitlines(True)) #以换行符分割成一个列表 swapcase() 58 i="dsds212ASDSDS" 59 print(i.swapcase()) #大小写互换
zfill() 61 print(i.zfill(20)) #指定字符串长度,右对齐不够在字符串左边补0

 

2、格式化字符串

     2.1%是格式化的操作符,有以下操作符

 

格式化符号

说明

%c

转换成字符(ASCII 码值,或者长度为一的字符串)

%r

优先用repr()函数进行字符串转换

%s

优先用str()函数进行字符串转换

%d / %i

转成有符号十进制数

%u

转成无符号十进制数

%o

转成无符号八进制数

%x / %X

转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)

%e / %E

转成科学计数法(e / E控制输出e / E)

%f / %F

转成浮点数(小数部分自然截断)

%g / %G

%e和%f / %E和%F 的简写

%%

输出% (格式化字符串里面包括百分号,那么必须使用%%)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意: 

1、% s   str()得到的字符串是面向用户的,具有较好的可读性

2、%r    repr()得到的字符串是面向机器的  eval(repr(str))

     2.2、格式化辅助操作符

通过"%"可以进行字符串格式化,但是"%"经常会结合下面的辅助符一起使用。

辅助符号

说明

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号(+)

#

在八进制数前面显示零(0),在十六进制前面显示"0x"或者"0X"(取决于用的是"x"还是"X")

0

显示的数字前面填充"0"而不是默认的空格

(var)

映射变量(通常用来处理字段类型的参数)

m.n

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

示例:

 1 num = 10
 2 print ("%d to hex is %x" %(num, num))#a
 3 print ("%d to hex is %X" %(num, num))#A
 4 print ("%d to hex is %#X" %(num, num))#0XA    x/X十六进制的大小写
 5 print ("%d to hex is %#x" %(num, num))#0xa
 6 # 浮点数
 7 f = 3
 8 f2=3.23
 9 print("value of f is: %.4f" %f)  #保留4位小数
10 print("value of f is: %e" %f2)
11 # 指定宽度和对齐
12 students = [{"name":"Wilber", "age":27},
13             {"name":"Will", "age":28},
14             {"name":"June", "age":27}]
15 print("name:%10s, age:%10d"%(students[0]["name"], students[0]["age"]))
16 #%10s代表指定name的value宽度为10,不够在左边补空格,右对齐
17 print("name:%-10s, age:%-10d"%(students[1]["name"], students[1]["age"]))
18 #与上边相反,左对齐,
19 print("name:%*s, age:%*d"%(10,students[2]["name"], -10, students[2]["age"]))
20 
21 # dict参数
22 for student in students:
23     print("%(name)s is %(age)d years old" %student)
24     print(student["name"],student["age"])

       2.3、字符串的拼接

 1 \'\'\'
 2 print("---请输入你的姓名和密码---")
 3 username=input("username:")
 4 password=input("password:")
 5 print(username,password)
 6 \'\'\'
 7 #python2里的raw_input和python3里一样
 8 print("---请输入员工信息employee information---")
 9 name=input("name:")
10 age=int(input("age:"))
11 job=input("job:")
12 salary=int(input("salary:"))
13 #字符串的拼接\'\'\'+....+\'\'\'
14 \'\'\'
15 em_information=\'\'\'
16 em_name:\'\'\'+name+\'\'\'
17 em_age:\'\'\'+age+\'\'\'
18 em_job:\'\'\'+job+\'\'\'
19 em_salary:\'\'\'+salary+\'\'\'
20 \'\'\'
21 print(em_information)
22 \'\'\'

23 #第2种方法采用%s格式化输出 24 #eg:%s,表示格化式一个对象为字符 比如: "Hello, %s"%"world" => "Hello, world" 这个一般用在格式化输出上 25 #%f 表示格式化一个对象为浮点型 26 em_information1=\'\'\' 27 em_name1:%s 28 em_age1:%d 29 em_job1:%s 30 em_salary:%d 31 \'\'\'%(name,age,job,salary) 32 print(type(name,),type(age)) #打印输出变量类型 33 print("em_information1:",em_information1)

34 #第3种方法,采用format()关键字参数 35 em_information2=\'\'\' 36 em_name2={_name} 37 em_age2={_age} 38 em_job2={_job} 39 em_salary2={_salary} 40 \'\'\'.format(_name=name, 41 _age=age, 42 _job=job, 43 _salary=salary) 44 print(em_information2)
45 #第4种方法,format()位置参数 46 em_information3=\'\'\' 47 em_name3={0} 48 em_age3={1} 49 em_job3={2} 50 em_salary3={3} 51 \'\'\'.format(name,age,job,salary) 52 print("em_information3:",em_information3)

补充:

infor=["Wilber",28,"it",9000]
print("""name={0[0]}
age={0[1]}
it={0[2]}
salary={0[3]}""".format(li))

       2.4字符串的迭代和一些风骚的操作