Python 元组、字典、集合

阳光穿透心脏的1/2处 2022-01-12 10:27 471阅读 0赞

今日目录:

  • 一、元组
  • 二、字典
  • 三、集合
  • 四、后期添加内容

一、元组

1.定义

  1. t1 = () # 参数为for可以循环的对象(可迭代对象)
  2. 思考:
  3. 如何定义一个只有一个值的元组?
  4. ("lisi")
  5. tuple(['lisi'])

2.常用操作

2.1 元组有序存储,索引取值
  1. t = (1,2,3)
  2. print(t[1])
  3. print(t[-2])
2.2 切片
  1. print(id(t))
  2. nt = t[:-1:]
  3. print(nt, id(nt))
2.3 长度(item元素个数)
  1. print(len(t))
2.4 元组内置方法
  1. t.count(2) # 该数据集合可以有效存放相同数据
  2. t.index(2)
  3. # .count(obj) .index(obj,bindex,eindex)
案例一:
  • 提前有一个老师列表,打算开出,如果是亲友团,免开
  • 原始列表为list类型
  • 手动输入是否是亲友团,决定是否能开除

    teas = [‘Bob’,’lisi’]
    friends = input(“亲友团【0,1】:”)

    if friends == ‘1’:

    1. teas = tuple(teas)

    判断teas对象是否是tuple类型

    if not isinstance(teas,tuple): # 老师是否是亲友团,不是就开除

    1. teas.clear()

    for t in teas:

    1. print("在职老师:%s"%t)
案例二
  • 元组中的数据一定不能改变吗:一定不能改变,但元组中的数据(可变类型)的数据可以改变

    t1 = (1, 2, “abc”, True, (1, 2)) # t1永远无法改变
    t2 = (1, 2, [])
    print(t2, type(t2), id(t2), id(t2[2]))
    t2[2].extend((10, 20))
    print(t2, type(t2), id(t2), id(t2[2]))

    (1, 2, []) 2654984899464 2654984915912

    (1, 2, [10, 20]) 2654984899464 2654984915912

二、字典

  1. 特别了解:dict Python中仅存的mapping类型

1.声明

  1. d1 = {'name': 'zhangsan', 'age': 18}
  2. 1.dict key 可以为所有不可变类型 (一般用strintfloat,tuple,str,bool,None
  3. 注:key具有唯一性(重复会覆盖旧值)
  4. value可以重复
  5. 2.dictvalue 可以为所有数据类型
  6. d1 = {'name':'zhangsan','age' = 18}
  7. d2 = dict({'name': 'lisi', 'age': 18})
  8. d3 = dict(name='zhangsan', age=17)
  9. # 字典无序存储数据,无索引与切片,用key来取值

2.增删改查

  1. 增:
  2. d3['gender'] = 'female'
  3. 改:
  4. d3['name'] = 'lisi'
  5. 查:
  6. print(d2['name'])
  7. 删:
  8. del d3['name']

3.内置方法

3.1 get 取值
  1. dic = {'a': 10, 'b': 20}
  2. # print(dic['c']) # KeyError: 'c'
  3. res = dic.get('c') # 拥有默认值None,可以避免错误
  4. print(res) # None
  5. res = dic.get("c", "key不存在") # 可以自定义默认值
  6. print(res) # key不存在
3.2 增
  1. dic = {'a': 10, 'b': 20}
  2. dic.update({'f': 100, 'c': 300})
  3. print(dic) # {'a': 10, 'b': 20, 'c': 300, 'f': 100}
  4. # 参数有就修改,没有就添加
  5. # 参数字典 与 dic可以重复,就是更新值,新key就是新增
3.3 删
  1. dic.pop('c') # 根据key删除指定对象,并返回删除的对象的值
  2. print(dic) # {'a': 10, 'b': 20, 'f': 100}
3.4 复制
  1. (浅拷贝 深拷贝)
  2. # 浅拷贝 :只做第一层copy ,内部的成员地址还是原来的地址
  3. new_dic = dic.copy()
  4. d1 = {'list': [1, 2]}
  5. d2 = d1.copy()
  6. print(id(d1), id(d1['list'])) # 1805017721608 1805018516424
  7. print(id(d2), id(d2['list'])) # 1805018516744 1805018516424
  8. d1['list'].append('abc')
  9. print(d2) # {'list': [1, 2, 'abc']} d2 的‘list’ id与d1的'list' id 相同
  10. 浅拷贝:(宏观字典会拷贝,但内部数据依旧使用原来的)
  11. dic = {'list':[10,20]}
  12. d1 = dic.copy()
  13. 深拷贝:
  14. from copy from deepcopy
  15. d2 = deepcopy(dic)
3.5 popitem()
  1. #无参数
  2. #随机删除,但返回值是(key,value)
  3. print(dic)
  4. print(dic.popitem()) # ('f', 100)
3.6 如何定义一个空字典
  1. d10 = {}.fromkeys(['a', 'b', 'c'])
  2. print(d10) # {'c': None, 'a': None, 'b': None}
  3. # fromkeys(['a','b'],' ')
  4. #第1个参数:keys = list |tuple|str 第2个参数:统一的默认value
案例
  1. # 添加老师
  2. d11 = {'a': 10}
  3. # 如果有teas,在原teas基础上添加老师,如果没有,新建一个空teas
  4. if 'teas' not in d11:
  5. d11['teas'] = []
  6. d11['teas'].append('zhangsan')
  7. print(d11)

4.字典循环与案例

  1. dic = {'a': 10, 'b': 20, 'c': 30}
  2. #直接for循环(遍历)字典得到的是key
  3. for obj in dic:
  4. print(obj) # print(obj,dic[k])
  5. # 能不能只循环值
  6. values = dic.values()
  7. # 存放key的集合
  8. keys = dic.keys()
  9. # 存放key-value的键值对关系
  10. k_vs = dic.items()
  11. print(k_vs) # dict_items([('a', 10), ('c', 30), ('b', 20)])
  12. print(keys) # dict_keys(['c', 'a', 'b'])
  13. print(values) # dict_values([10, 30, 20])
  14. ps: dic.valusesdic.keys()、dic.items()都不是原生list,不能直接索引取值,但可以for循环遍历
案例:不区分大写、计数每一个名字出现的次数,记录在字典中
  1. ls = ['Owen','Owen',"Egon",'Liuxx','Liuxx','egon']
  2. name_dic ={}
  3. for name in ls:
  4. # 名字全小写,不用区分大小写
  5. name = name.lower()
  6. #判断名字在不在字典中:存在 -> 次数+1 |不存在 -> 添加并设置初值1
  7. if name not in name_dic:
  8. name_dic[name] =1
  9. else:
  10. name_dic[name] += 1
  11. print(name_dic)
  12. 方法二:
  13. ls = ['Owen', 'Owen', "Egon", 'Liuxx', 'Liuxx', 'egon']
  14. name_dic = {}
  15. for name in ls:
  16. name = name.lower()
  17. # name已存在,不管;不存在,初始化指定key:name值为1
  18. name_dic.setdefault(name, 0)
  19. name_dic[name] += 1
  20. print(name_dic)
  21. # 结果:{'egon': 2, 'owen': 2, 'liuxx': 2}

三、集合

1.定义与声明

  1. 1.1 什么是set
  2. 1.单列数据集合:strlisttupleset
  3. 2.无序存储:无key,无index ,无法取值
  4. 3.可变数据类型,内部可以存放任意类型数据,但数据具有唯一性
  5. # {}代表字典,用set()来创建空集合
  6. s1 = set()

2.内置方法与使用 —-集合间的运算

  1. p_set = {'a','b','c','lisi'}
  2. l_set = {'x','y','z','lisi'}
  3. --- # 交集:& ---------------------------------------------------------
  4. res = p_set & l_set
  5. print(res) #{'lisi'}
  6. res = p_set.intersection(l_set)
  7. print(res) # {'lisi'}
  8. --- # 并集 : | --------------------------------------------------------
  9. res = p_set | l_set
  10. print(res) # {'z', 'b', 'lisi', 'a', 'y', 'x', 'c'} 一个无序集合
  11. res = p_set.union(l_set)
  12. print(res) # {'x', 'y', 'z', 'b', 'c', 'a', 'lisi'} 一个无序集合
  13. --- # 差集 : - -------------------------------------------------------
  14. res = p_set - l_set
  15. print(res) # {'b', 'a', 'c'} 去掉 egon ,剩下'a','b','c'
  16. res = p_set.difference(l_set)
  17. print(res) # {'a', 'b', 'c'}
  18. --- # 对称差集 :^ -----------------------------------------------------
  19. res = p_set ^ l_set
  20. print(res) # {'z', 'c', 'y', 'a', 'x', 'b'}
  21. res = p_set.symmetric_difference(l_set)
  22. print(res) # {'x', 'c', 'y', 'z', 'a', 'b'}

3、案例与应用场景

选课:
  1. # 需求:
  2. # 1.多少人参加了选课: ['owen', 'egon', 'liuxx']
  3. # 2.都选了哪些课程: ['python', 'linux', 'java']
  4. # 利用逻辑代码去重
  5. class_map = [
  6. ('owen', 'python'),
  7. ('egon', 'linux'),
  8. ('egon', 'python'),
  9. ('liuxx', 'python'),
  10. ('liuxx', 'java')
  11. ]
  12. names = []
  13. for name, _ in class_map:
  14. # 判断列表中是否已存在,不存在才添加
  15. if name not in names:
  16. names.append(name)
  17. print(names) # ['owen', 'egon', 'liuxx']
利用set去重
  1. classes = set()
  2. for _, cless in class_map:
  3. classes.add(cless)
  4. classes = list(classes)
  5. print(classes) #['python', 'java', 'linux']
了解:
  1. sup_set = {1, 2, 3, 4, 5}
  2. sub_set = {1, 2, 3}
  3. temp_set = {3, 2, 1}
  4. flag_set = {7, 8, 9}
  5. print(sup_set > sub_set) # True
  6. print(sup_set < sub_set) # False
  7. print(temp_set == sub_set) # True
  8. #两个set是否没有交集
  9. res = flag_set.isdisjoint(temp_set) # True

四、后期添加内容

菜鸟教程tuple:元组

菜鸟教程dict:字典

菜鸟教程set:集合

转载于:https://www.cnblogs.com/xt12321/p/10597142.html

发表评论

表情:
评论列表 (有 0 条评论,471人围观)

还没有评论,来说两句吧...

相关阅读