一:基本使用:tuple 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、长度
4、成员运算in和not in
5、循环 for item in ('a','b','c'): print(item)
需要掌握的操作 t=('a','b','c','a') print(t.count('a')) print(t.index('a',1,10)) print(t.index('xxx',1,10))
该类型总结 1 存多个值
2 有序
3 不可变
补充: 不可变类型=》可hash类型 可变类型 =》不可以hash类型二:基本使用dict 1 用途:记录多个值,每一个值都对应的key用来描述value的作用
2 定义方式:在{}内用逗号分隔开多 个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={[1,2]:'aaa'} dic={(1,2):'aaa'} print(dic[(1,2)])
用法一: 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') print(v)
需要掌握的操作
dic.fromkeys()的用法: l=['name','age','sex'] dic={'name':None,'age':None,'sex':None} dic={} for k in l: dic[k]=None print(dic)
dic=dic.fromkeys(l,None) print(dic)
old_dic={'name':'egon','age':18,'sex':'male'} new_dic={'name':'EGON','x':1,'y':2} old_dic.update(new_dic) print(old_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)) dic['x']=2 print(id(dic))
练习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)
练习2: s='hello alex alex say hello sb sb' words=s.split() dic={} # print(words) for word in words: if word in dic: dic[word]+=1 else: dic[word]=1
print(dic)
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)
pythons=['李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy'] linuxs=['lxx','egon','张金蛋','张锡蛋','alex','陈独秀']
l=[] for stu in pythons: if stu in linuxs: l.append(stu)
print(l)
三:基本使用:set 1 用途: 关系运算,去重
2 定义方式: 在{}内用逗号分开个的多个值 集合的三大特性: 2.1 每一个值都必须是不可变类型 2.2 元素不能重复 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]]))
3 常用操作+内置的方法 pythons={'李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy'} linuxs={'lxx','egon','张金蛋','张锡蛋','alex','陈独秀'} 取及报名python课程又报名linux课程的学员:交集 print(pythons & linuxs) print(pythons.intersection(linuxs))
取所有报名老男孩课程的学员:并集 print(pythons | linuxs) print(pythons.union(linuxs))
取只报名python课程的学员: 差集 print(pythons - linuxs) print(pythons.difference(linuxs))
取只报名linux课程的学员: 差集 print(linuxs - pythons) print(linuxs.difference(pythons))
取没有同时报名两门课程的学员:对称差集 print(pythons ^ linuxs) print(pythons.symmetric_difference(linuxs))
是否相等 s1={1,2,3} s2={3,1,2} print(s1 == s2)
父集:一个集合是包含另外一个集合 s1={1,2,3} s2={1,2} print(s1 >= s2) print(s1.issuperset(s2))
s1={1,2,3} s2={1,2,4} print(s1 >= s2)
子集 s1={1,2,3} s2={1,2} print(s2 <= s1) print(s2.issubset(s1))
需要掌握操作 s1={1,2,3} s1.update({3,4,5}) print(s1)
s1={1,2,3} res=s1.pop() print(res)
s1={1,2,3} res=s1.remove(3) #单纯的删除,返回值为None print(s1)
s1={1,2,3} s1.add(4) print(s1)
s1={1,2,3} s2={1,2} s1.difference_update(s2) #s1=s1.difference(s2) print(s1)
s1={1,2,3} res=s1.discard(3) ##单纯的删除,返回值为None print(s1) print(res) s1.remove(444444) #删除的元素不存在则报错 s1.discard(444444) #删除的元素不存在不会报错
s1={1,2,3} s2={1,2,4} print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回True
s1={1,2,3} s2={4,5,6}print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回True
该类型总结 1 存多个值
2 无序
3 set可变 s={1,2,3} print(id(s)) s.add(4) print(id(s))
集合去重 局限性 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)
四、字符编码
一 储备知识点1 运行程序的三大核心硬件 cpu 内存 硬盘
运行一个程序: 代码由硬盘读入内存,cpu从内存中读取指令执行
强调:程序运行过程中产生的数据一定是最先存放于内存中的
二 储备知识点2 运行python程序的三个阶段:python test.py 1、先启动python解释器 2、将test.py的内容当作普通字符读入内存 3、python解释器解释执行读入内存的代码,识别python的语法
python解释器运行程序的前两个阶段跟文本编辑器一模一样 只有第三个阶段不同
三 字符编码 人操作计算机使用人类认识的字符,而计算机存放都是二进制数字 所以人在往计算机里输入内容的时候,必然发生: 人类的字符------(字符编码表)--------》数字
ASCII: 用(8位bit二进制数)1Bytes对应一个英文字符 8bit= 1Bytes 1024Bytes=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB 1024TB=1PB
GBK:用2Bytes对应一个中文字符,1Bytes对应一个英文字符
unicode:用2Bytes对应一个字符 必须满足两大特点: 1、能够兼容万国字符 2、与老字符编码都有一种数字与数字的对应关系 a 1111 0111 a 0000 0000 1111 0111
utf-8:Unicode Transformation Format 一个中文字符:3bytes 一个英文字符:1bytes
强调: unicode格式的数字--------encode编码---------》utf-8格式的数字 unicode格式的数字《--------decode解码《---------utf-8格式的数字