美文网首页
2020-09-28-元祖和字典

2020-09-28-元祖和字典

作者: y_j杨健 | 来源:发表于2020-09-28 20:41 被阅读0次

    day6-元祖和字典

    元祖
    1. 什么是元祖(tuple)

      元祖是不可变的列表

      元祖是容器型数据类型,将()作为容器标志,里面多个元素用逗号隔开:(元素1,元素2...)

      元祖不可变(不支持元素的增删改);元祖是有序的(支持下标的操作)

      元素:任何数据类型,并且可以重复

      t1 = (1,3,'abc',85)
      print(type(t1), t1)  # <class 'tuple'>  (1,3,'abc',85)
      
    2. 只有一个元素的元祖

      如果元祖中有且只有一个元素,那么唯一的元素的后面必须加逗号

      t2 = (12,)
      print(type(t2)) # <class 'tuple'>
      
    3. 省略括号

      在没有歧义的情况下,可以省略元祖的(),直接将多个元素用逗号隔开来表示一个元祖

      t5 = 'abc',42,58,True
      print(t5,type(t5))  #  # ('abc', 42, 58, True) <class 'tuple'>
      
    4. 获取元素

      1)列表获取元素的方法元祖都支持

      song = ('葫芦娃', '稻香', '夜曲', '下山')
      print(song[1])
      print(song[1:])
      
      for x in song:
          print(x)
          
      for index,x in enumerate(song):
          print(index,x)
          
      for index in range(len(song)):
          print(song[index])
      

      2)让变量的个数和元祖中元素的个数保持一致 来获取元祖所有元素的值

      变量1,变量2,变量3... = 元祖

      num1,num2,num3 = (12,25,6)
      x,y,z = 2,25,6
      

      3)同时用多个变量获取元祖中的元素的时候,变量的个数可以比元祖中的个数少,但是有且只有一个变量的前面加*

      *m,n = 25,12,6
      print(*m,n)  # 25,12,6
      
      stu = ('小明','男',20,52,170)
      m1,*m2,m3 = stu
      print(m1,*m2,m3)  # 小明 ['男', 20, 52, 58, 6] 8
      
    5. 元祖的相关操作

      列表相关操作元祖都支持

      print((1,2,3) + (4,5)) # (1,2,3,4,5)
      print((1,2,3)*2)  # # (1, 2, 3, 1, 2, 3)
      print((1,2,3) > (44,2))  # False
      print((1,2,3) == (1,3,2))  # False     (元祖是有序的)
      

      in 和 not in

      print(10 in (10,20,30))  # True
      print(10 not in (10,20,30))  # False
      

      sum,max,min, sorted,len,tuple

      t1 = (1,2,3)
      print(sum(t1))
      print(max(t1))
      print(min(t1))
      
      new_t1 = sorted(t1)  # 排序(升序) 产生一个新的列表
      print(new_t1)  # [1, 2, 3]
      
      print(len(t1))  # 3
      
      print(tuple('abc'))  # ('a', 'b', 'c')
      print(tuple(range(5)))  # (0, 1, 2, 3, 4)
      
    字典
    1. 什么时候使用字典:同时保存多个意义不同的数据就使用字典

    2. 什么是字典

      字典是容器型数据类型,将{}作为容器,里面多个元素用逗号隔开(元素必须键值对:{键1:值1,...})

      字典是可变的(支持增删改查),字典是无序的(不支持下标操作)

      元素: 必须是键值对:

      ​ 键: -- 必须是不可变的数据(数字,字符串,元祖)一般使用字符串,键是用来对值进行描述和区分的,是唯一的

      ​ 值: -- 没有要求

      1)键是不可变的

      d2 = {'name':'小明',10:200,(1,2):200}
      print(d2) # {'name': '小明', 10: 100, (1, 2): 200}
      
      # 报错! 列表不能作为键
      d2 = {'name':'小明',10:200,[1,2]:200}
      print(d2) # # TypeError: unhashable type: 'list'
      

      2)键是唯一的

      d3 = {'name':'小明','age':'18','name':'张三'}
      print(d3) # {'name': '张三', 'age': '18'}
      

      3)字典是无序

      print({'a':10,'b':20} == {'b':20,'a':10})  # True
      
    3. 字典的增删改查

      1.1)获取单个值

      a.字典[key] - 获取指定key对应的值(如果key不存在会报错

      b.字典.get(key) - 获取指定key对应的值(如果key不存在会报错)

      dog = {'name':'财财','age':2,'sex':'母狗'}
      print(dog['name'])  # 财财
      print(dog.get('age'))  # 2
      
      print(dog.get('weight'))  # None
      print(dog.get('weight',0))  # 0
      

      1.2)遍历

      for 变量 in 字典:

      ​ pass

      注意:变量依次取到的是字典的key

      dog = {'name':'财财','age':2,'sex':'母狗'}
      for x in dog:
          print('x:',x,dog[x])
      
      # x: name 财财
      # x: age 2
      # x: sex 母狗
      

      2) 增、改

      字典[key] = 值 -- 当key存在就是修改指定的值,当key不存在就是添加键值对

      dog = {'name':'财财','age':2,'sex':'母狗'}
      dog['name'] = '花花'
      dog['weight'] = 20
      print(dog)   # {'name': '花花', 'age': 2, 'sex': '母狗', 'weight': 20}
      

      3)删

      del 字典[key] - 删除指定key对应的键值对

      字典.pop(key) - 取出指定key对应的值

      dog = {'name':'财财','age':2,'sex':'母狗'}
      del dog['name']
      print(dog)  # {'age': 2, 'sex': '母狗'}
      
      del_age = dog.pop('age')
      print(dog,del_age)  # {'sex': '母狗'} 2
      

    字典的实际应用

    练习:定义一个变量保存一个班级的信息,班级信息主要包含:班级名称、位置、容量、班主任、讲师、所有学生
    班主任:姓名、性别、年龄、电话、QQ
    讲师:姓名、性别、年龄、电话、QQ、级别
    所有学生:多个学生,每个学生包含:姓名、性别、年龄、学历、专业、电话
    
    class1 = {
        'name':'python2004',
        'location':'9教室',
        'capacity':'50',
        'class_teacher':{
            'name':'张老师',
            'gender':'女',
            'age':'30',
            'tel':'110',
        },
        'teacher':{
            'name','骆昊',
            'gender','男',
            'age','25',
            'tel','1558945',
            'rank','特级讲师',
        },
        'students':[
            {'name': '小明', 'gender': '男', 'age': 19},
            {'name': '小花', 'gender': '女', 'age': 18},
            {'name': '张三', 'gender': '男', 'age': 23},
            {'name': 'Tom', 'gender': '男', 'age': 22},
            {'name': 'Bob', 'gender': '男', 'age': 30}
        ],
    }
    
    
    print(class1['teacher']['name'],class1['teacher']['rank'])
    
    # 计算班级所有学生平均年龄
    
    sum1 = 0
    ages = class1['studens']
    for x in ages:
        sum1 += x['age']
    print(sum1/len(ages))  #  22.4    
    

    字典的相关操作

    字典不支持加法乘法运算,也不支持比较大小

    1)in 和 not in

    key in 字典 - 判断字典中是否存在指定的键

    d1 = {'a':10,'b':20}
    print(10 in d1)  # False
    print('a'  in  d1)  # True
    

    2)相关函数:len dict

    print(len(d1)) # 2

    """
    字典的类型转换
    dict(数据)  - 将指定数据转换成字典,数据要求
                a.数据本身是序列
                b.序列中的每个元素必须是长度为2的小序列
                c.小序列中的第一个元素是不可变的数据
                
    list(数据)  - 将指定的字典转换成列表(将字典的key作为列表的元素)
    """
    
    print(dict(['ab',[1,2]])) # {'a':'b',1:2}
    
    # list(字典)
    d1 = {'a':10,'b':20,'c':30}
    print(list(d1))  # ['a', 'b', 'c']
    

    3)相关方法

    ​ 1)字典.clear() - 清空字典

    ​ 2)字典.copy() - 复制字典产生一个一模一样的新字典并返回

    ​ 3)dict.fromkeys(序列) - 创建一个新的字典,键是序列中的每个元素,值都是None

    ​ 4)keys values items

    """
    字典.keys() - 获取字典所有的key(返回值是序列但是不是列表)
    字典.values() - 获取字典所有的值(返回值是序列但是不是列表
    字典.items() - 同时获取每个键值对的键和值(返回值是序列,序列中元素是元祖)
    """
    
    d1 = {'a':10,'b':20,'c':30}
    print(d1.keys())  # dict_keys(['a', 'b', 'c'])
    print(d1.values()) # dict_values([10, 20, 30])
    print(d1.items()) # dict_items([('a', 10), ('b', 20), ('c', 30)])
    
    

    ​ 5)字典.setdefault(键,值) - 在字典中添加键值对(只添加不修改)

    d1 = {'a':10,'b':20,'c':30}
    d1.setdefault('name','小明')
    print(d1)  # # {'a': 10, 'b': 20, 'c': 30, 'name': '小明'}
    

    ​ 6)字典1.update(字典2) - 将字典2中所有的键值对都添加到字典1中:注意:字典2不一定是字典,也可以是能转换成字典的序列

    d1 = {'a':10,'b':20,'c':30}
    d1.update({'name':'张三'})
    print(d1)  # #   {'a': 10, 'b': 20, 'c': 30, 'name': '张三'}
    

    1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)

    stu = {
        'name':'小明',
        'age':18,
        'score':90,
        'tel':1589546,
        'sex':'男'
    }
    
    

    2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
    a.统计不及格学生的个数
    b.打印不及格学生的名字和对应的成绩
    c.统计未成年学生的个数
    d.打印手机尾号是8的学生的名字
    e.打印最高分和对应的学生的名字
    f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

    ​ g.删除性别不明的所有学生

    list1 = [
    { 'name':'小明','age':18, 'score':70,'tel':1589546,'sex':'不明'},
    { 'name':'张三','age':15, 'score':90,'tel':1589548,'sex':'男'},
    { 'name':'李四','age':20, 'score':45,'tel':1589546,'sex':'不明'},
    { 'name':'王五','age':16, 'score':56,'tel':1589548,'sex':'男'},
    { 'name':'小王','age':23, 'score':52,'tel':1589542,'sex':'女'},
    { 'name':'小李','age':25, 'score':60,'tel':1589544,'sex':'女'}
    ]
    #   a.统计不及格学生的个数
    #   b.打印不及格学生的名字和对应的成绩
    count = 0
    not_adult = 0
    for x in list1:
        if x['score'] < 60:
            print(x['name'],x['score'])
            count += 1
        if x['age'] < 18:
            not_adult += 1
    print('不及格的学生有:{}个,为成年的学生有:{}个'.format(count,not_adult))  # 不及格的学生有3个
    
    # 李四 45
    # 王五 56
    # 小王 52
    # 不及格的学生有3个
    
    #   d.打印手机尾号是8的学生的名字
    for i in list1:
        if i['tel'] % 10 == 8:
            print(i['name'])
            
    print('============================')
    
    #   e.打印最高分和对应的学生的名字
    max_score = 0
    for i in list1:
        if i['score'] > max_score:
            max_score = i['score']
    print(max_score)
    for x in list1:
        if x['score'] == max_score:
            print(x['name'])
            
    print('+++++++++++++')
    for x in list1:
        for i in list1:
            if i['score'] > max_score:
                max_score = i['score']
        if x['score'] == max_score:
            # print(x['name'])
            max_score_name = x['name']
    
    print(max_score,max_score_name)
    print('-------------------')
    
    # ​ g.删除性别不明的所有学生
    for index,x in enumerate(list1):
        if x['sex'] == '不明':
            list1.remove(list1[index])
    print(list1)
    
    #   f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
    

    3.用三个列表表示三门学科的选课学生姓名(一个学生可以同时选多门课)
    a. 求选课学生总共有多少人
    b. 求只选了第一个学科的人的数量和对应的名字
    c. 求只选了一门学科的学生的数量和对应的名字
    d. 求只选了两门学科的学生的数量和对应的名字
    e. 求选了三门学生的学生的数量和对应的名字

    相关文章

      网友评论

          本文标题:2020-09-28-元祖和字典

          本文链接:https://www.haomeiwen.com/subject/hsyjuktx.html