数据类型
数据类型划分:可变数据类型 不可变数据类型
不可变数据类型:元组、bool、int (本身不可更改)、str (可哈希)
可变数据类型:列表list、字典dict 、集合set (不可哈希)
注意:集合为不可变类型,但是集合元素可变
一、Int
int 1,2,3... 用于计算
print(i.bit_length()) #求二进制最小位数
例如:
i=7
print(i.bit_length())
二、Bool
只有两种结果:True False
int----->str str(int)
str----->int int(str) 注意:字符串必须为数字
int----->bool 非零转换为bool为True,反之则为False
bool---->int 只有两种结果,真为1,假为0;
str-------bool
s=" " -------False 空字符串则为False
s="0"--------True 非空字符串都为True
相比
while True:
pass
还有一种方法更有效率:
while 1:
pass
三、字符串str
1、字符串的索引
s='ASDFGHJKL' s1=s[3] print(s1)
结果为:F
注意:对字符串进行操作否会形成新的字符串,对原字符串没有影响。
2、字符串的切片
s='ASDFGHJKL' s1=s[0] s2=s[0:4] s3=s[-1] s4=s[-2] s5=s[0:] s6=s[:] s7=s[0:0] s8=s[1:5:2] s9=s[0:4:-1] s10=s[3::-1] s11=s[3::-2] s12=s[-1::-1] s13=s[::-1]
3、字符串的操作
s="alex wusir" s1=s.capitalize() #首字母大写 s2=s.upper() #全部大写 s3=s.lower() #全部小写
下面看一个咱们常用的关于验证码的例子:
s_str="acEQ" you_input=input("请输入验证码,不区分大小写") if s_str.upper()==you_input.upper(): print("登录成功") else: print("验证码错误,请重新输入")
继续看对字符串的操作:
s4=s.swapcase() #大小写翻转 s5=s.title() #每个隔开的单词,首字母大写(特殊字符或数字) s6=s.center(20,"#") #居中,空白填充
s7=s.expandtabs() #逢8补齐
字符串有长度吗?答案是肯定的。咱们来看一下计算字符串长度的方法:
s="alex wusir" i=len(s) #计算字符串的长度 print(i)
注意:中间的空格也占一个长度单位。
查看字符串开头和结尾的方法
s="alex wusir" s1=s.startswith("alex") #字符串是以...开头 s2=s.endswith("sir") #字符串是以...结尾
查看字符在字符串中的索引位置:
s1=s.find("w") #返回w在字符串中的索引位置 s2=s.find("ex") #如果是多个,以第一个字母索引为准
通过位置找索引
s13=s.find("q") #通过元素找索引,找不到返回-1 s14=s.index("u") #通过元素找索引,找不到报错
删除字符串中空格或多余部分:
s1=s.strip() #默认删除空格 a="*a%lex Wusir%" s2=a.strip("*%") #删除前后相同内容 print(s2) s=" alex wusir " s3=s.strip() #删除前后空格 s4=s.rstrip() #删除右边空格 s5=s.lstrip() #删除左边空格
找出单个字符在字符串中的个数
s="asdfgbnhfdsshjk" s1=s.count("s") #输出字母s在字符串中的个数 print(s1)
字符串转化为列表
s="alex wusir taibsi" #字符串转化为列表 y=s.split() print(y)
4、格式化输出 format的三种方法
s1="我叫{},今年{},爱好{},再说一遍我叫{}".format("高雅",22,"看电影","高雅") s2="我叫{0},今年{1},爱好{2},再说一遍我叫{0}".format("高雅",22,"看电影") s3="我叫{name},今年{age},爱好{hobby},再说一遍我叫{name}".format(name="高雅",age=22,hobby="看电影")
5、replace 替换全部相同内容
s="我在教室写代码,写代码真有趣!" r=s.replace("写代码","看书") print(r)
replace("旧","新")
还可以加入替换的个数
replace("旧","新",个数)
6、for循环
s="pycharm" for i in s: print(i)
四、列表
1、增
有三种方法:append、insert、extend
li=["alex","wusir","egon","女神","taibai"] l1=li.append("高雅") #列表后面追加 l2=li.insert(1,"丫丫") #按照索引插入 l3=li.extend("写代码") #分解成最小元素添加
l3输出结果:['alex', 'wusir', 'egon', '女神', 'taibai', '写', '代', '码']
注意:int对象不能迭代;
可迭代的是每个组成的元素
例题:添加新员工姓名,按q退出
li = ['alex','wusir','egon','女神','taibai'] while True: name = input("新人姓名:") if name.upper()=="Q": break else: li.append(name)
2、删
四种方法:pop、remove、clear、del
li=["alex","wusir","egon","女神","taibai"] l1=li.pop(1) #按照索引删除元素 print(l1,li) l2=li.pop() #索引为空,默认删除最后一个 l3=li.remove("高雅") #按照元素删除 l4=li.clear() #清空列表(列表为空) del li #删除列表(列表消失) del li[2:] #按照切片删除
l1输出结果:女神 ['taibai', 'wusir', 'egon']
注意:1)、pop()中,加入索引,唯一一个有返回值,索引为空,默认删除最后一个;
2)、clear()方法,列表为空,但列表存在;
3)、del方法,列表消失。
3、改
两种方法:按索引、按切片
li=["alex","wusir","egon","女神","taibai"] li[0]="男神" #按索引修改 li[0]=[1,2,3] #按索引修改为列表 li[1:2]="yaya" #按切片修改(切片所指内容删除,在此位置随机按照元素添加)
li[1:2]="yaya"输出结果为:['alex', 'y', 'a', 'y', 'a', 'egon', '女神', 'taibai']
注意:按切片修改只是把切片内容删除,在此位置添加输入内容,并且是以单个元素添加
4、查
两种方法:for循环、切片
li=["alex","wusir","egon","女神","taibai"] for i in li: #for循环查询 print(li[0:2]) #按切片查
5、排序
li=[1,4,6,3,5,2,7,9] li.sort() #正向排序 li.sort(reverse=True) #反向排序 li.reverse() #反转
注意:排序只能用于Int类型,否则报错
6、列表的嵌套
li=["taibai","丑小丫","高雅",["alex","egon",78],34] print(li[1][1]) #小 print(li[0].capitalize()) #Taibai li[2]=li[2].replace("雅","丫") #高雅变为高丫(好难听啊。。) print(li) li[3][0]=li[3][0].upper() #ALEX print(li)
五、元组
只读列表,可循环查询,可切片。(儿子不能改,孙子可能可以改)
tu=(1,2,3,"alex",[2,3,4],"egon") print(tu[3].upper()) #ALEX tu[4].append("taibai") #内嵌列表中添加taibai print(tu) for i in tu: #查询元祖中的每个元素 print(i) print(tu[0:4]) #(1, 2, 3, 'alex')
六、公共方法
1、len( ) 计算长度
tu=(1,2,3,"alex",[2,3,4],"egon") l=len(tu) print(l) #输出结果:6
2、count( ) 计算个数
tu=(1,2,3,"alex",[2,3,4],"egon","alex") num=tu.count("alex") print(num) #输出结果:2
3、index( ) 查询索引
tu=(1,2,3,"alex",[2,3,4],"egon","alex") print(tu.index("egon")) #输出结果:5
七、Join
join:列表转换为字符串
那么字符串转换为列表是什么呢?之前讲过的,对了,就是split。
s="alex" s1="_".join(s) #用_连接 print(s1) #输出结果:a_l_e_x s2="*".join(s) #用*连接 print(s2) #输出结果:a*l*e*x li=["alex","hello"] s3="".join(li) #无缝连接 print(s3) #输出结果:alexhello
注意:引号里面是啥,就用此连接,如果是空,就是无缝连接。
八、Range
相当于列表,但元素只能是数字。
顾头不顾尾、0开头不用写、可以有步长
range()放索引位置,可切片
for i in range(10): print(i) #输出结果:0,1,2,3,4,5,6,7,8,9 for i in range(0,10,2): print(i) #输出结果:0,2,4,6,8 for i in range(10,0,-3): print(i) #输出结果:10,7,4,1
注意一下
for i in range(0,10,-2): print(i) #输出结果:
输出结果为空,啥都没有。
下面做一道题:让列表循环,当然里面的内嵌列表页要循环哦!
li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds'] #第一种方法: for i in li: if type(i)==list: for j in i: print(j) else: print(i) #第二种方法: for i in range(len(li)): if i==5: for j in li[i]: print(j) else: print(li[i])
九、字典
python 中唯一一个映射数据类型
字典的key:必须是不可变数据类型
value:任意数据类型
字典dict优点:二分法查询
存储大量的关系型数据
特点:无序(包括3.5级以前版本)
1、增
1)、直接添加
dic1={"name":"jin","age":18,"sex":"male"} dic1["high"]=185 #没有键值对,直接添加 dic1["age"]=16 #有键,则值覆盖 print(dic1)
2)、 setdafault
dic1.setdefault("weight") #有键值对不做任何改变,没有才添加 print(dic1) dic1.setdefault("weight",150) print(dic1)
2、删
1)、pop: 直接按照字典的键删除,有返回值
dic1={"name":"jin","age":18,"sex":"male"} dic1.pop("age") #有返回值, dic1.pop("high","没有") #有则直接删除,没有则返回提示语 print(dic1)
2)、 popitem:随机删除,有返回值
dic1.popitem() #随机删除 print(dic1)
3)、clear:清空字典
dic1.clear() #清空字典 print(dic1)
4)、del:删除键值对,删除字典
del dic1["name"] #删除键值对,没有则报错 print(dic1) del dic1["high"] print(dic1) del dic1 #删除字典
3、改
1)、直接通过字典的键修改
dic1={"name":"jin","age":18,"sex":"male"} dic1["age"]=16 #键相同,值覆盖 print(dic1)
2)、update:更新字典
dic2={"name":"alex","weight":75} dic2.update(dic1) #原字典更新添加到旧字典,有键则值覆盖,无键则全添加 print(dic2)
4、查
1)、通过keys、values、items查找
dic1={"name":"jin","age":18,"sex":"male"} print(dic1.keys()) #字典的键 print(dic1.values()) #字典的值 print(dic1.items()) #字典的条目(以元组形式,键、值显示)
2)、for循环
for i in dic1: #啥都不写,默认为键 print(i) for i in dic1.keys(): #字典的键 print(i) for i in dic1.values(): #字典的值 print(i) for i in dic1.items(): #字典的条目 print(i) for k,v in dic1.items(): #以键、值形式显示 print(k,v)
3)、直接通过字典的键查询值
print(dic1["name"]) #查找对应的值,找不到报错 print(dic1["name1"]) #报错
4)、get
print(dic1.get("name")) #查找对应的值,找不到返回none print(dic1.get("name1","None")) print(dic1.get("name1","没有这个值"))#查找对应的值,找不到则返回提示语
5、字典dict嵌套
dic={ "name":["alex","wusir","taibai"], "py9":{ "time":"1213", "learn_money":19800, "addr":"CBD" }, "age":21 }
对上面列表进行操作:
1)、将alex全部大写
dic["name"][0]=dic["name"][0].upper() print(dic)
2)、在name中添加yaya
dic["name"].append("yaya") print(dic)
3)、将年龄变为56
dic["age"]=56 print(dic)
4)、在py9中添加键值对女生有6人
dic["py9"]["female"]=6 print(dic)