一:数据类型int和float
数据类型int
1 用途:
记录电话号码,年龄,房间号等整型数据
2 定义方式:
age =10 age = int(18) print(type(age)) int('abcdefg') #报错 int('1.1')#报错 int('222') # int只能讲字符串中包含的纯数字转成整型
3 进制转换
①其他进制转成十进制
二进制:0,1 10 1*(2**1) + 0*(2**0) 十进制:0-9 371 3*(10**2) + 7*(10**1) + 1*(10**0) 八进制:0-7 371 3*(8**2) + 7*(8**1) + 1*(8**0) 十六进制:0-9 A-F 371 3*(16**2) + 7*(16**1) + 1*(8**0)
②十进制转换成其他进制
十进制转换成二进制 bin(100) 十进制转换成八进制 oct(100) 十进制转换成十六进制 hex(1000)
4int类型总结
1 存一个值
2 不可变
>>>x=1 >>> print(id(x)) 1925279200 >>> x=10 >>> print(id(x)) 1925279488
由此可见,一个对象的id的值变化之后id地址发生改变,就是不可变类型
值变化之后id地址不变,就是可变类型
二:数据类型:float
1用途:
记录身高,体重,薪资等浮点型数据(带小数点的数据)
2定义方式
salary = 3.1 #相当于salary = float(3.1) res = float('2.5') print(type(res))
float类型总结
和int一样,存一个值,不可变
>>> x=2.4 >>> print(id(x)) 2537333137768 >>> x=5.6 >>> print(id(x)) 2537333137792
二:五大数据类型 字符串,list dict set tupe
一:字符串
1用途:
记录描述性的状态,比如人的名字,住址,性别等
2 定义方式
在"",'',""""""内包含一系列的字符
name = 'andy' #name = str('andy') res1 = str(1) res2 = str({1,2,3}) print(type(res1),type(res2)) sex = 'man'
3 常用操作+内置的方法
优先掌握的操作
1 按照索引取值(正向取+反向取):只能取
msg='hello world' print(msg[4]) print(msg[-1]) msg[3]='D' name='andy'
2 切片(顾头不顾尾,步长)
msg= 'hello-world' #就是从一个大的字符串中切分出一个全新的子字符串 print(msg[0:5]) # hello print(msg) # 还是原来的值 print(msg[0:5:1]) #hello print(msg[0:5:2]) #hlo print(msg[0:5:-1]) #-olle print(msg[5::-1]) #-olleh print(msg[-1::-1]) #dlrow-olleh print(msg[::-1]) # dlrow-olleh
3 长度:
msg= 'andy is headsome' print(len(msg))
4 成员运算in 和not in 判断一个子字符串是否存在于一个大字符串中
msg = 'andy is very headsome' print('andy' in msg) #True print('is' in msg) #True print('xiaohui' not in msg) #True print('not xiaohui'in msg) #False
5 去掉字符串左右两班的字符stript,管不到中间的
msg1 = ' python ' msg2 = '***$$$andy ' print(msg1.stript) print(msg2.stript('* $ '))
name = input('please your name').stript()
if name == 'andy':
print('login successfull')
6 切分split:针对按某种分隔符组织的字符串,可以用split将其切分成列表,进而进行取值
msg="root:123456:0:0::/root:/bin/bash" res = msg.split('/') print(res[0]) 解压赋值 msg = '张三,李四,王五' name1,name2,name3 = msg.split(',')
7、循环
msg = 'hello andy' for i in msg: print(i)
4 需要掌握的
1 stript,lstripy,rstript
print('*****andy*****'.lstrip('*')) print('*****andy*****'.rstrip('*')) print('*****andy*****'.strip('*'))
2 lower ,supper
msg='aABBBBb' res=msg.lower() print(res) print(msg)
3、startswith,endswith
msg = 'andy is very headsome' print(mag.startswith('andy')) print(msg.endswith('headsome')) print(msg.endswith('me'))
4、format的三种玩法
print('my name is %s my age is %s' %('andy',18)) print('my name is {name} my age is {age}'.format(age=18,name='andy'))
5、split,rsplit :清除括号内的字符,默认为空格
msg='get|a.txt|333331231' print(msg.split('|',1)) print(msg.split('|',1)) print(msg.rsplit('|',1))
6.join
msg='get|a.txt|333331231' l=msg.split('|') print(l) src_msg = '|'.join(l) print(src_msg)
7 replace: 替换
msg = 'andy is very good ' msg = msg.replace('andy','ouyang',1) print(msg)
8 isdigit 判断字符串中包含的是否为纯数字
num = input('>>>').stript() if num.isdigit(): age = int(num) print('通过')
5 需要了解的内置方法
1 find ,rfind,index,rindex,count
msg='hello alex is sb' print(msg.find('alex')) print(msg.find('alex',0,3)) print(msg.index('alex')) print(msg.index('alex',0,3)) msg='alex aaa alex' print(msg.find('alex')) print(msg.rfind('alex')) msg='alex aaa alex' print(msg.count('alex')) #统计一个子字符串在大字符串中出现的次数
2 center,ljust,rjust,zfill
print('andy'.center(50,'*')) print('andy'.ljust(50,'*')) print('andy'.rjust(50,'*')) print('andy'.zfill(50))
3、expandtabs
print('a\tb'.expandtabs(1))
4、captalize,swapcase,title
print('hello'.capitalize()) print('hElLo'.swapcase()) print('egon is nb'.title())
5、is数字系列
在python3中
num1=b'4' #bytes num2=u'4' #unicode,python3中无需加u就是unicode num3='壹' #中文数字 num4='Ⅳ' #罗马数字 #.isnumeric(): unicode,中文数字,罗马数字 print(num2.isnumeric()) print(num3.isnumeric()) print(num4.isnumeric()) #.isdecimal(): unicode print(num2.isdecimal()) print(num3.isdecimal()) print(num4.isdecimal()) #.isdigit() :bytes,unicode print(num1.isdigit()) print(num2.isdigit()) print(num3.isdigit()) print(num4.isdigit())
6、is其他
print('abc你'.isalpha()) 字符串中包含的是字母或者中文字符
print('ab'.isalnum())#字符串中包含的是字母(中文字符)或数字 print('123123'.isalnum()) print('ab123'.isalnum())
6 字符串总结
存一个值,有序,不可变
x='abc' print(id(x))#3075587665512 x='def' print(id(x))#3075588599968
二:列表:
1 用途:
存放多个值,可以根据索引存取值
2 定义方式:
在[]内用逗号分割开来 多个任意类型的值
l=['egon','lxx','yxx'] # l=list(['egon','lxx','yxx']) l1=list('hello') #list就相当于调用了一个for循环依次取出'hello'的值放入列表 print(l1) l2=list({'x':1,'y':2,'z':3}) print(l2) list(10000) #报错
3 常用操作+内置的函数
优先掌握的操作:
1、按索引存取值(正向存取+反向存取):即可存也可以取
l=['egon','lxx','yxx'] print(l[0]) l[0]='EGON' print(l) print(l[-1]) print(l[3]) l[0]='EGON' #只能根据已经存在的索引去改值 l[3]='xxxxxxxx' #如果索引不存在直接报错
2、切片(顾头不顾尾,步长)
l=['egon','lxx','yxx',444,555,66666] print(l[0:5]) print(l[0:5:2]) print(l[::-1])
3、长度
l=['egon','lxx','yxx',444,555,66666,[1,2,3]] print(len(l))
4、成员运算in和not in
l=['egon','lxx','yxx',444,555,66666,[1,2,3]] print('lxx' in l) print(444 in l)
5 追加
l=['andy','xiaohui','zhangsan'] l.append('lisi') print(l)
6 往指定索引前插入值
l=['andy','xiaohui','zhangsan'] l.insert(2,'ahah') l.insert(0,'toutou') print(l)
7 删除
l=['andy','xiaohui','zhangsan'] #单纯的方式删除 # 方式一: del l[0] 方式二: res = l.remove('zhangsna')#指定要删除的值 print(res,l) 方式三: res = l.pop[3]#按照索引删除值(默认是从末尾删除),返回删除的那个值 print(l,res)
8、循环
l=['egon','lxx','yxx'] for item in l: print(item)
需要掌握的操作:
l = ['andy','xiaohui','andy','nihao','lxx','egon'] print(l.count('andy')) # 计算列表中存在几个'andy' print(l.index('xiaohui')) # 在列表中查找字符,有就返回索引,没有就报错 print(l.index('lxx',0,3)) # 在索引0到三种寻找字符串 l.clear()
l=['egon','egon','lxx','yxx',444,555,66666] items='hello' for item in items: l.append(item)#从末尾添加 l.extend(items)#将字符分开添加 print(l)
l=['egon','egon','lxx','yxx',444,555,66666] l.reverse()#将列表翻转 print(l)
nums=[3,-1,9,8,11] nums.sort(reverse=True)#将列表降序排列/reverse=False升序排列 排序的必须是同一类型 print(nums)
列表总结
1 有多个值
2有序
3 可变
l=['a','b','c'] print(id(l))#1843850249352 l.append('d') print(id(l))#1843850249352
队列:先进先出
l=[] #入队 l.append('first') l.append('second') l.append('third') print(l) #出队 print(l.pop(0))#first print(l.pop(0))#second print(l.pop(0))#third
堆栈:先进后出
l=[] #入栈 l.append('first') l.append('second') l.append('third') print(l) #出栈 print(l.pop())#third print(l.pop())#second print(l.pop())#first
三:元组
1 用途:
记录多个值,当这个值没有改的需求,此时使用元祖比较合适
2 定义方式:
在()内用逗号分割开来多种类型的值
t=(1,1.3,'xx',('a','b'),[1,2]) #t=tuple((1,1.3,'xx',('a','b'),[1,2])) print(t,type(t)) t1=tuple('hello') print(t1)
3 常用操作+内置方法
优先掌握的操作:
1、按索引取值(正向取+反向取):只能取
t=('egon',123,['a','b']) print(id(t[0])) print(id(t[1])) print(id(t[2])) t[2][0]='A' print('='*50) print(id(t[0])) print(id(t[1])) print(id(t[2])) t[0]='EGON' t[2]='xxxx' t[2][0]='A' print(t)
2、切片(顾头不顾尾,步长)
t=(1,2,3,4,5) print(t[0:3]) print(t)
3、长度
t=(1,2,3,4,5) print(len(t))
4、成员运算in和not in
t=(1,2,3,4,5) print(1 in t)
5、循环
for item in ('a','b','c'): print(item)
需要掌握的操作
t=('a','b','c','a') print(t.count('a'))#计算元组中字符出现的次数 print(t.index('a',1,10))#在元组索引(1,10)中查找字符,有就返回索引,没有报错 print(t.index('xxx',1,10))
二:tuple总结
1 存多个值
2 有序
3 不可变
四:字典:
不可变类型 ==>可hash类型
可变类型 ==>不可hash类型
1 dict :用途:
记录多个之,每一个只都有对应的key用来描述对应的value
2 dict的定义方式:
在{}内用逗号分割开来多个key:value,其中value可以使任意类型的值,二key必须是不可变类型,通常情况下应该是str类型
dic={0:'aaa',1:'bbb',2:'cccc'} #dic=dict({0:'aaa',1:'bbb',2:'cccc'}) print(dic,type(dic)) print(dic[0])
用法一:
dic = dict(x=1,y=2,z=3) print(dic)
用法二:
userinfo=[ ['name','egon'], ['age',18], ['sex','male'] ] d={} for k,v in userinfo: k,v=['name', 'egon'] print(k,v) d[k]=v print(d) d=dict(userinfo) print(d)
3 常用操作+内置的方法
优先掌握的操作:
1、按key存取值:可存可取
dic={'name':'egon'} print(dic['name']) dic['name']='EGON' print(dic) dic['age']=18 print(dic) l=['a','b'] l[0]='A' l[2]='c'
2、长度len
dic={'name':'egon','age':18,'name':'EGON','name':'XXXX'} print(dic) print(len(dic))
3、成员运算in和not in:字典的成员运算判断的是key
dic={'name':'egon','age':18,} print(18 in dic) print('age' in dic)
4、删除
dic={'name':'egon','age':18,} #通用 del dic['name'] print(dic) del dic['xxx']# key不存在则报错 res=dic.pop('age') #删除key对应的value,并返回value print(dic) print(res) dic.pop('xxx')# key不存在则报错 res=dic.popitem()#删除字典最后的 print(dic) print(res)
5、键keys(),值values(),键值对items()
dic={'name':'egon','age':18,} print(dic.keys()) l=[] for k in dic.keys(): l.append(k) print(l) print(list(dic.keys())) print(dic.values()) print(list(dic.values())) print(dic.items()) print(list(dic.items()))
6、循环
dic={'name':'egon','age':18,'sex':'male'} for k in dic.keys(): print(k,dic[k]) for k in dic: print(k,dic[k]) for v in dic.values(): print(v) for k,v in dic.items(): print(k,v)
8 dic.get()
dic={'name':'egon','age':18,'sex':'male'} dic['xxx'] v=dic.get('name') print(v) v=dic.get('xxx')#不存在返回None print(v)
需要掌握的操作
dic.fromkeys()的用法:
l=['name','age','sex'] dic={} dic=dic.fromkeys(l,None)#以列表L中的值作为Key,None为每个Key的Value print(dic)#{'name': None, 'age': None, 'sex': None}
dic.update()的用法:
old_dic={'name':'egon','age':18,'sex':'male'} new_dic={'name':'EGON','x':1,'y':2} old_dic.update(new_dic)#更新 print(old_dic)#{'name': 'EGON', 'age': 18, 'sex': 'male', 'x': 1, 'y': 2}
dic.setdefault:有则不动/返回原值,无则添加/返回新值
dic={'name':'egon','age':18} res=dic.setdefault('name','EGON') #字典中已经存在key则不修改,返回已经存在的key对应的value print(dic) print(res) res=dic.setdefault('sex','male') #字典不存在key则添加"sex":"male",返回新的value print(dic) print(res)
二:该类型总结
1 存多个值
2 无序
3 可变
dic={'x':1} print(id(dic))#2515662048064 dic['x']=2 print(id(dic))#2515662048064
练习1:
nums=[11,22,33,44,55,66,77,88,99,90] dic={ 'k1':[], 'k2':[] } for num in nums: if num > 66: dic['k1'].append(num) else: dic['k2'].append(num) print(dic) #{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]}
练习2:
s='hello alex alex say hello sb sb' words=s.split() dic={} print(words)#['hello', 'alex', 'alex', 'say', 'hello', 'sb', 'sb'] for word in words: if word in dic: dic[word]+=1 else: dic[word]=1 print(dic)#{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2} s='hello alex alex say hello sb sb' words=s.split() dic={} for word in words: #word="hello" dic.setdefault(word,words.count(word)) #{'hello':2,"alex":2,"say":1,} print(dic)#{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
集合
一:基本使用:set
1 用途:
关系运算,去重
2 定义方式:
在{}内用逗号分开个的多个值
集合的三大特性:
1 每一个值都必须是不可变类型
2 元素不能重复
3 集合内元素无序
s={1,3.1,'aa',(1,23),}# s=set({1,3.1,'aa',(1,23),}) print(s,type(s))#打印出来的是无序 s={1,1,1,1,1,1,1,1,1,2,3} print(s) s={'a','b','c'} s[0]#集合没有索引 s=set('hello') print(s) print(set(['a','b','c',[1,2]]))#报错,集合是不可hash
3 常用操作+内置的方法
pythons={'李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy'} linuxs={'lxx','egon','张金蛋','张锡蛋','alex','陈独秀'}
取及报名python课程又报名linux课程的学员:交集
print(pythons & linuxs)#{'张锡蛋', 'alex', '张金蛋'} print(pythons.intersection(linuxs))#{'张锡蛋', 'alex', '张金蛋'}
取所有报名老男孩课程的学员:并集
print(pythons | linuxs)#{'陈独秀', 'oldboy', '赵铜蛋', 'egon', '张金蛋', 'alex', '张锡蛋', '李二丫', '李银弹', 'lxx'} print(pythons.union(linuxs))#{'陈独秀', 'oldboy', '赵铜蛋', 'egon', '张金蛋', 'alex', '张锡蛋', '李二丫', '李银弹', 'lxx'}
取只报名python课程的学员: 差集
print(pythons - linuxs)#{'李银弹', 'oldboy', '赵铜蛋', '李二丫'} print(pythons.difference(linuxs))#{'李银弹', 'oldboy', '赵铜蛋', '李二丫'}
取只报名linux课程的学员: 差集
print(linuxs - pythons)#{'lxx', '陈独秀', 'egon'} print(linuxs.difference(pythons))#{'lxx', '陈独秀', 'egon'}
取没有同时报名两门课程的学员:对称差集/交叉补集
print(pythons ^ linuxs)#{'赵铜蛋', '陈独秀', 'oldboy', 'lxx', '李银弹', '李二丫', 'egon'} print(pythons.symmetric_difference(linuxs))#{'赵铜蛋', '陈独秀', 'oldboy', 'lxx', '李银弹', '李二丫', 'egon'}
是否相等
s1={1,2,3} s2={3,1,2} print(s1 == s2)#True
父集:一个集合是包含另外一个集合
s1={1,2,3} s2={1,2} print(s1 >= s2)#True print(s1.issuperset(s2))#True s1={1,2,3} s2={1,2,4} print(s1 >= s2)#False
子集
s1={1,2,3} s2={1,2} print(s2 <= s1)#True print(s2.issubset(s1))#True
需要掌握操作
update
s1={1,2,3} s1.update({3,4,5}) print(s1)#{1,2,3,4,5}
pop
s1={1,2,3} res=s1.pop() print(res)#无序删除,并返回值 print(s1)
remove
s1={1,2,3} res=s1.remove(3) 单纯的删除,返回值为None print(s1)
add
s1={1,2,3} s1.add(4) print(s1)#{1,2,3,4}
difference_update
s1={1,2,3} s2={1,2} s1.difference_update(s2) #在s1中删除与s2重复的,并把剩下的返回给s1 print(s1)
discard
s1={1,2,3} res=s1.discard(3) #单纯的删除,返回值为None print(s1) print(res) s1.remove(444444) #删除的元素不存在则报错 s1.discard(444444) #删除的元素不存在不会报错
isdisjoint
s1={1,2,3} s2={1} print(s1.isdisjoint(s2)) #如果两个集合有交集则返回False s1={1,2,3} s2={4,5,6} print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回True
二:该类型总结
1 存多个值
2 无序
3 set可变
s={1,2,3} print(id(s))#2286174155496 s.add(4) print(id(s))#2286174155496
集合去重
局限性
1、无法保证原数据类型的顺序
2、当某一个数据中包含的多个值全部为不可变的类型时才能用集合去重
names=['alex','egon','alex','alex','egon','lxx'] s=set(names) print(s) l=list(s) print(l) stus_info=[ {'name':'egon','age':18}, {'name':'alex','age':73}, {'name':'oldboy','age':84}, {'name': 'egon', 'age': 18}, {'name': 'egon', 'age': 18}, {'name': 'egon', 'age': 18}, {'name': 'oldboy', 'age': 84}, ] # set(stus_info) #报错 l=[] for info in stus_info: if info not in l: l.append(info) print(l) stus_info=l print(stus_info)