day 07
内容概要
- 利用列表模拟出队列与堆栈的特征
- 字典及其内置方法
- 元组及其内置方法
- 集合及其内置方法
详细内容
-
利用列表模拟出队列与堆栈的特征
''' 队列 先进先出 堆栈 先进后出 ''' # 队列 l = [] l.append(111) l.append(222) l.append(333) print(l.pop(0)) print(l.pop(0)) print(l.pop(0)) # 堆栈 l = [] l.append(111) l.append(222) l.append(333) print(l.pop()) print(l.pop()) print(l.pop()) -
字典及其内置方法
''' 定义:用{}括起来,内部存放多个元素,元素中间用逗号隔开,元素形式为:key:value key 必须是不可变类型:字符串、整型、浮点型 value 可以是任意类型 ''' # dic = { # 'name': 'ycc', # 11: 222, # 11.11: 333 # } # print(dic, type(dic)) # 一、优先掌握操作 # 1、按key取值,可存可取 # 2、长度len # 3、成员运算 # 4、删除 # 5、键keys(),值values(),键值对items() # 6、for循环 # 1、按key取值,可存可取 # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # print(dic['name']) # ycc # dic['name'] = 'xixi' # print(dic) # {'name': 'xixi', 'age': 20, 'hobbies': ['play', 'tea']} # dic['k1'] = 666 # print(dic) # {'name': 'xixi', 'age': 20, 'hobbies': ['play', 'tea'], 'k1': 666} # # 总结:键值存在则修改对应的value值,键值不存在则直接添加 # print(dic['k3']) # 若打印不存在的键值则直接报错 # 2、长度len # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # print(len(dic)) # 3 # # 3、成员运算 # # in not in # print('name' in dic) # True # print(20 in dic) # False 字典默认只暴露key value不暴露 如果想取 一般只能通过key # 4、删除 # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # # 4.1 del # del dic['name'] # print(dic) # {'age': 20, 'hobbies': ['play', 'tea']} 字典不能用索引 # 4.2 pop # dic.pop('age') # print(dic) # {'name': 'ycc', 'hobbies': ['play', 'tea']} # 5、键keys(),值values(),键值对items() # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # 5.1 keys() # print(dic.keys()) # dict_keys(['name', 'age', 'hobbies']) # ''' # python3 与 python2中的对比 # python3:dict_keys(['name', 'age', 'hobbies']) # python2:['name', 'age', 'hobbies'] # ''' # for k in dic.keys(): # 等价与 for k in dic: # print(k) # name age hobbies # 5.2 values() # print(dic.values()) # dict_values(['ycc', 20, ['play', 'tea']]) # ''' # python3 与 python2中的对比 # python3:dict_values(['ycc', 20, ['play', 'tea']]) # python2:(['ycc', 20, ['play', 'tea']]) # ''' # for v in dic.values(): # print(v) # ycc 20 ['play', 'tea'] # # 5.3 items() # print(dic.items()) # dict_items([('name', 'ycc'), ('age', 20), ('hobbies', ['play', 'tea'])]) # ''' # python3 与 python2中的对比 # python3:dict_items([('name', 'ycc'), ('age', 20), ('hobbies', ['play', 'tea'])]) # python2:[('name', 'ycc'), ('age', 20), ('hobbies', ['play', 'tea'])] # ''' # for i in dic.items(): # print(i) # ('name', 'ycc') ('age', 20) ('hobbies', ['play', 'tea']) # 6、for循环 # 字典for循环只能取到key # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # for i in dic: # print(i) # name age hobbies # 二、内置方法 # 1.get() # 2.clear() # 3.fromkeys() # 4.popitem() # 5.setdefault() 重点************************* # 6.update() # # 1.get() # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # print(dic.get('name')) # ycc key存在 # print(dic.get('k1')) # None key不存在 # print(dic['name']) # ycc key存在 # # print(dic['k1']) # 报错 key不存在 # # 总结 获取value的值的方法有以上2种,如果key存在则都能取到value,如果key不存在get()返回None,另一种直接报错 # print(dic.get('k1', 'haha')) # haha 若不存在key,也可通过这种形式直接返回value # 2.clear() # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # dic.clear() # print(dic) # {} # 3.fromkeys() 快速生成字典 # l = ['name', 'age', 'hobbies'] # res = dict.fromkeys(l, None) # print(res) # {'name': None, 'age': None, 'hobbies': None} # 4.popitem() # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # res = dic.popitem() # print(res) # ('hobbies', ['play', 'tea']) 随机删除一组键值对,但是现在的版本的python都是删除最后一组键值对,不必纠结 # 5.setdefault() 重点************************* # dic = {'name': 'ycc', 'age': 20, 'hobbies': ['play', 'tea']} # print(dic.setdefault('name', 'xixi')) # ycc # print(dic.setdefault('k1', 111)) # 111 # 总结:key存在不能修改value,key不存在直接新建一对键值对 # 6.update() # dd = {'name':'jason','pwd':123} # dd.update({'age':18}) # 键不存在 则新建 # dd.update({'name':'EGONDSB'}) # 键存在则修改 # print(dd) # # 还不如使用下列方式 # dd['age'] = 18 # dd['name'] = 'jason' # # 创建字典的3种方式 # # 1. # l1 = {'k1': 11, 'k2': 'ccc'} # print(dict(l1)) # # 2. # print(dict(name='ycc', pwd=123)) # # 3. l3 = [ ['username', 'jason'], ['password', 123], ['hobby', ['read', 'run']] ] # print(dict(l3)) #1 # dic = {} #2 # for k in l3: # dic[k[0]] = k[1] # print(dic) # dic = {} #3 # for k,v in l3: # dic[k] = v # print(dic) # 总结以上第2、3种方法等价于第一种方法 -
元组及其内置方法
''' 定义:小括号括起来,可存放多个元素,元素与元素之间逗号隔开,元素可以是任意类型 元组可简单的看成列表 注意:************元组是不可变类型,但是列表是可变类型 ''' # 类型转换 与list一致 支持for循环的都可以 # t1 = (1) # print(type(t1)) # int # t2 = ('a') # print(type(t2)) # str # l1 = [1] # print(type(l1)) # list """ 元组当内部只有一个元素的时候 逗号不能省略 以后只要是容器类型 无论内部有几个元素 都必须要有逗号 尤其是只有一个元素的情况下 (1,) [1,] {'username':'jason',} """ # 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读 # 定义:与列表类型比,只不过[]换成() # 优先掌握的操作: # 1、按索引取值(正向取+反向取):只能取 # t1 = (11,22,33) # t1[0] = 666 # print(t1) """ 笔试题 元组内元素的内存地址不能修改 但是如果元素是可变类型 那么元素值可以改 """ # t2 = (11,22,[11,22]) # t2[2].append(33) # # 问:上述代码执行的结果是什么 # print(t2) # (11, 22, [11, 22, 33]) # 2、切片(顾头不顾尾,步长) # 与字符串 列表一致 # 3、长度 # len() # 4、成员运算in和not in # 与列表一致 # 5、循环 # for i in (11,22,33): # print(i) -
集合及其内置方法
""" 大括号括起来 内部可以存放多个元素 元素与元素之间逗号隔开(不是k:v键值对) 元素只能是不可变类型(整型 浮点型 字符串 元组) s = {1,2,3,4} 只有两种情况才会考虑使用集合 1.关系运算 两个群体之间判断 交叉并集 共同好友 共同关注 共同点赞... 2.去重操作 去除重复的元素 """ # se = {1,2,3,4,5} # set(1,2,3,4,5) # print(type(se)) # set # d1 = {} # s1 = {} # print(type(d1),type(s1)) # <class 'dict'> <class 'dict'> # """定义空集合 需要使用关键字set""" # ss = set() # print(ss,type(ss)) # set # s = {11,1.1,'hello',(1,2,3)} # 2.去重操作 l = [11,22,33,22,11,44,33,22,55,66,66,66] # for循环一个个元素 判断当前元素是否已存在 # new_l = [] # for i in l: # if i not in new_l: # new_l.append(i) # print(new_l) # [11, 22, 33, 44, 55, 66] # 将列表转换成集合 # res = set(l) # print(res) # '''集合内默认不能出现重复的元素 如果出现了会自动去重''' # r1 = {11,22,22,22,11,44,44,44} # print(r1) # 关系运算 f1 = {'jason','egon','kevin','tony'} f2 = {'jason','jack','oscar','kevin'} # 共同好友 print(f1 & f2) # {'jason', 'kevin'} # f1独有的好友 print(f1 - f2) # {'tony', 'egon'} # f2独有的好友 print(f2 - f1) # {'oscar', 'jack'} # 所有的好友 print(f1 | f2) # {'jason', 'oscar', 'egon', 'tony', 'kevin', 'jack'} # 求各自好友 不包含共有的 print(f1 ^ f2) # {'jack', 'oscar', 'tony', 'egon'} # 父集 子集 """ 父级:A包含B 那么A就是B的父级 子级:A包含B 那么B就是A的子级 """ s1 = {1,2,3,4,5} s2 = {1,2,3} print(s1 > s2) # True print(s1 < s2) # False
作业
一、字典练习题
1.将列表中大于等于66的元素放入字典k1键对应的列表中
将列表中小于66的元素放入字典k2键对应的列表中
nums=[11,22,33,44,55,66,77,88,99,90]
dic={
'k1':[],
'k2':[]
}
2.s='hello jason jason say hello sb sb sb'
统计字符串中每个单词出现的次数
{'jason':2,...}
二、集合练习题
(1)关系运算
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
(2) 去重并且保留原来的顺序
l = [11,22,33,22,22,33,11,22,55,66,66,77,77]
1.去重不保留顺序
2.去重并且保留顺序
# 一、字典练习题
# 1.将列表中大于等于66的元素放入字典k1键对应的列表中
# 将列表中小于66的元素放入字典k2键对应的列表中
# nums=[11,22,33,44,55,66,77,88,99,90]
# dic={
# 'k1':[],
# 'k2':[]
# }
# nums = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
# dic = {
# 'k1': [],
# 'k2': []
# }
# for i in nums:
# if i >= 66:
# dic.get('k1').append(i)
# else:
# dic.get('k2').append(i)
# print(dic)
# 2.s='hello jason jason say hello sb sb sb'
# 统计字符串中每个单词出现的次数
# {'jason':2,...}
# s = 'hello jason jason say hello sb sb sb'
# res = s.split(' ') # 指定字符: ' ' 将字符串切割且指定字符不保留,切割后的形式为:列表
# # print(res) # ['hello', 'jason', 'jason', 'say', 'hello', 'sb', 'sb', 'sb']
# dic = {} # 定义一个空字典
# for i in res: # 遍历列表res
# if i in dic: # 判断当前的key值是否存在
# dic[i] += 1
# else:
# dic[i] = 1
# print(dic)
# 二、集合练习题
# (1)关系运算
# # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
# pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
# linuxs = {'wupeiqi', 'oldboy', 'gangdan'}
# # 1. 求出即报名python又报名linux课程的学员名字集合
# print(pythons & linuxs)
#
# # 2. 求出所有报名的学生名字集合
# print(pythons | linuxs)
# # 3. 求出只报名python课程的学员名字
# print(pythons - linuxs)
# # 4. 求出没有同时这两门课程的学员名字集合
# print(pythons ^ linuxs)
# (2) 去重并且保留原来的顺序
# l = [11, 22, 33, 22, 22, 33, 11, 22, 55, 66, 66, 77, 77]
# # 1.去重不保留顺序
# print(set(l))
# # 2.去重并且保留顺序
# new_l = []
# for i in l:
# if i not in new_l:
# new_l.append(i)
# print(new_l)

浙公网安备 33010602011771号