第二周 Day 3—— Python容器

第二周 Day 3 —— 容器

一、列表相关操作

1. 列表推导式
  1. 序列变幻成列表

    nums = [10, 245, 89, 45]
    list2 = [x*100 for x in nums]
    print(list2)        # [1000, 24500, 8900, 4500]
    
  2. 筛选(提取出有效的或者删除无效的)

    scores = [100, 84, 45, 89, 99, 78, 65, 12, 92, 77, 32]
    new_scores = [x for x in scores if x >= 60]
    print(new_scores)       # [100, 84, 89, 99, 78, 65, 92, 77]
    
  3. 不统一的变幻

    list1 = [19, 'abc', 98, 'mnb', 13, 53]
    # ->[190, 'abc', 980, 'mnb', 130, 530]
    new_list1 = [x*10 if type(x) == int else x for x in list1 ]  #三目运算
    print(new_list1)             # [190, 'abc', 980, 'mnb', 130, 530]
    
2. 列表的加法和乘法
  1. 加法

    列表1 + 列表2 —— 合并两个列表产生一个新的列表

    a = [1, 2, 3]
    b = ['亚索','卡特琳娜']
    result = a + b
    print(result)         # [1, 2, 3, '亚索', '卡特琳娜']
    
  2. 乘法

    列表 * N —— 列表中的元素重复N次产生一个新的列表

    a = [1, 2, 3]
    print(a * 3)          # [1, 2, 3, 1, 2, 3, 1, 2, 3]
    
3. 比较运算
  1. 比较相等:==!=

    a. 两个列表相等,列表元素的类型、值、个数、顺序要一样

    print([1, 2, 3] == [1, 2, 3])      # True
    print([1, 2, 3] == [1, 3, 2])      # False
    

    b. 两个不同类型的数据可以判断是否相等,只是结果一定是False

    print([1, 2] == ['abc'])       # False
    print([1, 2] == '[1, 2]')      # False
    

    c. is的用法

    print(2 is 2)              # True
    print('you' is 'you')      # True
    print([1, 2] is [1, 2])    # False
    

    is的实质是判断两个数据在内存中的地址是否相同

    id(变量) — 获取变量中保存的数据在内容空间中的地址

    结论1:用数据给变量赋值的时候,如果数据是不可变,那么会复用前面存储的值。

    如果数据可变,不管之前有没有存储过,都会重新开辟新的内容空间。

    # 数据可变
    a = 100
    b = 100
    print(id(a), id(b))          # 1910297360 1910297360
    # 列表不可变
    a = [10, 20]
    b = [10, 20]
    print(id(a), id(b))          # 1460367337352 1460367336584
    # 元组不可变
    a = (10, 20)
    b = (10, 20)
    print(id(a), id(b))          # 2306786481992 2306786482056
    # 字典可变
    a = {'a': 10}
    b = {'a': 10}
    print(id(a), id(b))          # 1460165434968 1460165435040
    

    结论2:如果一个变量给另外一个变量赋值,其实是让新的变量保存原变量中的数据的地址。(不会开辟新的空间保存数据)

    a = 100
    b = a
    print(id(a), id(b))          # 1910297360 1910297360
    
    a = [10, 20]
    b = a
    print(id(a), id(b))          # 1927609264008 1927609264008
    

    结论3:python中所有的变量都是指针变量。(变量保存数据的时候其实保存的是数据在内存中存储的地址)

二、列表相关函数和方法

1.相关函数:maxminsumsortedlenlist
  1. maxmin

    • max(序列) — 返回序列中元素的最大值
    • min(序列) — 返回序列中元素的最小值
    nums = [90, 80, 46, 78, 100]
    print(max(nums))       # 100
    print(min(nums))       # 46
    

    序列中元素数据类型必须是一样的。

  2. sum

    • sum(序列) — 求序列中所有元素的和(序列中的元素只能是数字)
    nums = [90, 80, 46, 78, 100]
    print(sum(nums))            # 394
    print(sum(range(101)))      # 5050
    
  3. sorted

    • sorted(序列) — 将序列中的元素从小到大排序(升序),以列表的形式返回
    • sorted(序列, reverse=True) — 将序列中的元素从大到小排序(降序),以列表的形式返回
    nums = [90, 80, 46, 78, 100]
    new_nums1 = sorted(nums)    # 不会影响原列表
    print(new_nums1)            # [46, 78, 80, 90, 100]
    new_nums2 = sorted(nums, reverse=True)
    print(new_nums2)            # [100, 90, 80, 78, 46]
    
  4. list

    • list(序列) — 将其他序列转换成列表(任何序列都可以转换成列表)
    list1 = list('abc')
    print(list1)           # ['a', 'b', 'c']
    list2 = list(range(10, 15))
    print(list2)           # [10, 11, 12, 13, 14]
    
2. 相关方法 — 列表.xxx()
  1. 列表.clear() — 删除列表中所有的元素

    song = ['关山酒', '将故事写成我们']
    song.clear()
    print(song)    # []
    
  2. 列表.copy() — 返回一个和原列表一样(长得一样)的新的列表

    song = ['关山酒', '将故事写成我们']
    song2 = song.copy()
    print(song2)           # ['关山酒', '将故事写成我们']
    

    列表[:]、列表+[]、列表*1 — 都可以返回一个新的长得一样的列表

  3. 列表.count(元素) — 返回元素在列表中出现的次数

    nums = [90, 80, 46, 78, 100, 80, 76, 80, 90, 80]
    print(nums.count(80))         # 4
    
  4. 列表.extend(序列) — 将序列中的元素去全部添加到列表中

    song = ['关山酒', '将故事写成我们']
    song.extend(['告白气球', '生生'])
    print(song)                 # ['关山酒', '将故事写成我们', '告白气球', '生生']
    
  5. 列表.index(元素) — 返回元素在列表中的下标(从0开始的下标值)

    song = ['关山酒', '将故事写成我们', '告白气球', '生生', '将故事写成我们']
    print(song.index('将故事写成我们'))       # 1
    # print(song.index('七里香'))           # 报错 
    

    如果元素在列表中有多个,则返回的是第一次出现的元素的下标。

    如果元素不存在列表中,则报错。

  6. 列表.reverse() — 列表逆序

    song = ['关山酒', '将故事写成我们', '告白气球', '生生', '将故事写成我们']
    song.reverse()      # new_song = song[::-1]也可实现逆序
    print(song)         # ['将故事写成我们', '生生', '告白气球', '将故事写成我们', '关山酒']
    
  7. 列表.sort() — 将原列表排序(升序)

    列表.sort(reverse=True) — 降序

    nums = [90, 80, 46, 78, 100]
    nums.sort()
    print(nums)       # [46, 78, 80, 90, 100]
    

二、字典

1.什么是字典 —— dict
  1. 字典是容器型数据类型,将{}作为容器的标志,里面多个元素(元素都是键值对)用逗号隔开。

{键1:值1,键2:值2,键3:值3,…}

注意:字典保存数据,其实是想要保存的是值,键的作业是对值进行区分和说明的。

dict1 = {}    # 空字典
print(dict1, type(dict1))      # {} <class 'dict'>
  1. 字典可变(支持增删改);字典是无序的(不支持下标操作)

  2. 字典的元素 —— 必须值键值对

    • 键 — 必须是不可变的数据(一般使用字符串)、唯一的
    • 值 — 任何类型的数据都行,可以重复
    dict1 = {10: 100, 125: 200, 'name': '张三', True: 300}
    print(dict1)         # {10: 100, 125: 200, 'name': '张三', True: 300}
    
    # dict2 = {[10,20]: 100}   # 报错,列表是可变的数据,不能作为键
    
    dict3 = {10: 100, 20: 200, 10: 300}      
    print(dict3)          # {10: 300, 20: 200}   键是唯一的
    

练习:定义一个变量保存一条狗的信息

dog = {
    'name': '赛亚人',
    'age': 5,
    'sex': '公狗',
    'weight': 15,
    'variety': 'Chinese Country Dog',
    'master': 'Maple'
}

三、字典的增删改查

1. 查 —— 获取字典的值
  1. 获取单个值

    • 字典[key] — 获取字典中指定key对应的值,如果key不存在会报错
    • 字典.get(key) — 获取字典中指定key对应的值,如果key不存在,不会报错并返回None
    • 字典.get(key, 默认值) — 获取字典中指定key对应的值,当key不存在时返回默认值
    film = {'name': '肖生克的救赎', 'director': '弗兰克·德拉邦特', 'time': '1994'}
    print(film['name'])         # '肖生克的救赎'
    print(film['time'])         # '1994'
    print(film['age'])          # 报错
    
    print(film.get('name'))     # '肖生克的救赎'
    print(film.get('time'))     # '1994'
    print(film.get('age'))      # None
    print(film.get('age', '不存在age'))      # 不存在age
    
  2. 遍历

    • for - in — 遍历字典,变量取到的是字典的键
    film = {'name': '肖生克的救赎', 'director': '弗兰克·德拉邦特', 'time': '1994'}
    for x in film:
        print(x,film[x])         
    #name 肖生克的救赎
    #director 弗兰克·德拉邦特
    #time 1994
    

    练习:定义一个变量保存一个班所有的学生信息,每个学生中包含姓名、年龄、性别、电话号码
    # 1)计算这个这个班的学生的平均年龄
    # 2)统计班级中女生的个数

    # 方法一
    students = [
        {'name': 'stu1', 'age': 18, 'gender': '男', 'tel': '1101'},
        {'name': 'stu2', 'age': 22, 'gender': '女', 'tel': '1104'},
        {'name': 'stu3', 'age': 30, 'gender': '女', 'tel': '1102'},
        {'name': 'stu4', 'age': 23, 'gender': '男', 'tel': '1106'},
        {'name': 'stu5', 'age': 24, 'gender': '男', 'tel': '1109'},
        {'name': 'stu6', 'age': 16, 'gender': '女', 'tel': '1100'}
    ]
    ages = 0
    girl_num = 0
    for stu in students:
        ages += stu['age']
        if stu['gender'] == '女':
            girl_num += 1
    print(f'平均年龄:{ages // len(students)}')      # 平均年龄:22
    print(f'女生的个数:{girl_num}')                 # 女生的个数:3
    
    # 方法二(了解)
    avr_ages = sum([x['age'] for x in students]) // len(students)
    print(f'平均年龄:{avr_ages}')                   # 平均年龄:22
    
    result = [x['gender'] for x in students].count('女')
    print(f'女生的个数:{result}')                   # 女生的个数:3
    
2. 增、改

字典[key] = 值 — 当key存在的时候就是修改,当key不存在的时候就是增加

computer = {'price': 5432, 'brand': '联想'}
print(computer)                     # {'price': 5432, 'brand': '联想'}
computer['color'] = '白色'
print(computer)                     # {'price': 5432, 'brand': '联想', 'color': '白色'}
computer['price'] = 3000
print(computer)                     # {'price': 3000, 'brand': '联想', 'color': '白色'}
3. 删
  1. del 字典[key] — 删除字典中指定key对应的键值对。(key不存在,报错)

    computer = {'price': 3000, 'brand': '联想', 'color': '白色'}
    del computer['price']
    print(computer)                 # {'brand': '联想', 'color': '白色'}
    
  2. 字典.pop(key) — 取出字典中指定key对应的值。

    computer = {'price': 3000, 'brand': '联想', 'color': '白色'}
    price = computer.pop('price')
    print(computer, price)                 # {'brand': '联想', 'color': '白色'} 3000
    

四、字典相关操作及方法

1. innot in操作

​ 字典的innot in判断的是某刻key是否存在

dict1 = {'a': 10, 'b': 20, 'c': 30}
print(10 in dict1)     # False
print('a' in dict1)    # True
2. maxminsumsorted(了解)——这些操作全部针对字典的key
dict1 = {'a': 10, 'b': 20, 'c': 30}
print(max(dict1))       # c
3. dict

dict(序列) — 将序列转换成字典。

序列的要求:a. 序列中的每个元素都是序列

​ b. 小序列有且只有两个元素

​ c. 小序列的第一个元素不可变

seq = ['ab', '12', 'c1']
print(dict(seq))            # {'a': 'b', '1': '2', 'c': '1'}

seq = [range(2), ['name', 'age']]
print(dict(seq))            # {0: 1, 'name': 'age'}
4. 字典转列表(所有序列都可以转换成列表)

将字典所有的键作为列表元素

dict1 = {'a': 10, 'b': 20, 'c': 30}
print(list(dict1))          # ['a', 'b', 'c']

​ b. 小序列有且只有两个元素

​ c. 小序列的第一个元素不可变

seq = ['ab', '12', 'c1']
print(dict(seq))            # {'a': 'b', '1': '2', 'c': '1'}

seq = [range(2), ['name', 'age']]
print(dict(seq))            # {0: 1, 'name': 'age'}
4. 字典转列表(所有序列都可以转换成列表)

将字典所有的键作为列表元素

dict1 = {'a': 10, 'b': 20, 'c': 30}
print(list(dict1))          # ['a', 'b', 'c']
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值