2020-09-27-列表的删除-切片-相关操作-相关方法

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.统计未成年学生的个数

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':'女'}
]

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个

​ d.打印手机尾号是8的学生的名字

for i in list1:
    if i['tel'] % 10 == 8:
        print(i['name'])

​ e.打印最高分和对应的学生的名字

max_score = 0
max_score_name = ''
# 方法一:
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'])
        
# 方法二:
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)

​ f.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

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

for index,x in enumerate(list1):
    if x['sex'] == '不明':
        list1.remove(list1[index])
print(list1)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值