day07-列表和字典

列表续和字典

  1. 列表推导式
    1)序列变换列表

    str1 = 'abc'
    list1 = [x for x in str1]
    print(list1)   # ['a', 'b', 'c']
    
    nums = [11, 22, 33, 44]
    list2 = [x*100 for x in nums]
    print(list2)   # [1100, 2200, 3300, 4400]
    
    list3 = [x % 10 for x in nums]
    print(list3)   # [1, 2, 3, 4]
    
    1. 筛选(提取出有效的或者删除无效)
    scores = [89, 10, 20, 60, 70, 80, 85, 90]
    new_scores = [x for x in scores if x >= 60]
    print(new_scores)     # [89, 60, 70, 80, 85, 90]
    

    3)不统一的变换

    list4 = [19, 'abc', 98, 'hh', 13, 53]
    # -> [190, 'abc', 980, 'hh', 130, 530]
    new_list4 = [x*10 if type(x) == int else x for x in list4]
    print(new_list4)
    
  2. 列表的加法和乘法

    • 列表1 + 列表2 - 合并两个列表产生一个新的列表
    a = [1, 2, 3]
    b = ["亚索", "盲僧"]
    result = a + b
    print(result)      # [1, 2, 3, '亚索', '盲僧']
    
    • 列表 * N - 列表中的元素重复N次产生一个新的列表

      a = [1, 2, 3]
      result1 = a * 3
      print(result1)   # [1, 2, 3, 1, 2, 3, 1, 2, 3]
      
  3. 比较运算

    1)比较相等 ==、!=

    • 元素顺序不同的两个列表不相等

      print([1, 2, 3] == [1, 2, 3])  # True
      print([1, 2, 3] == [1, 3, 2])  # False
      
    • 两个不同类型的数据可以判断是否相等,但结果一定是False

      print([1, 2] == 'abc')         # False
      print([1, 2] == '[1, 2]')      # False
      print(['a', 'b'] == 'ab')      # False
      
    • is的用法

      is的实质是判断两个数据的空间地址是否一样

      print("is:", 2 is 2)   # True
      print('abc' is 'abc')  # True
      print("is:", [1, 2] is [1, 2], [1, 2] == [1, 2])
      

    注:

    list1 = [110, 120]
    list2 = [110, 120]
    print(list1 is list2)  # False
    
    list1 = [100, 200]
    list2 = list1           # 赋值一定是赋地址 等价于 b = &a
    print(list1 is list2)   # True
    

    结论1:用数据给变量赋值的时候,如果数据是不可变,那么会复用前面存储的值。
    如果数据可变,不管之前有没有存储过,都会重新开辟新的内容空间
    id(变量) - 获取变量中保存的数据的内容空间中的地址

    a = 100
    b = 100
    print(id(a),id(b))  # 140710905766016 140710905766016
    

    例:

    # 列表可变
    a = [10, 20]
    b = [10, 20]
    print(id(a),id(b))  # 2665317834120 2665317601352
    
    # 元组不可变
    a = (10, 20)
    b = (10, 20)
    print(id(a),id(b))  # 2665314367752 2665314367752
    
    # 字典可变
    a = {'a': 10}
    b = {'a': 10}
    print(id(a),id(b))  # 2092780802624 2092780802120
    

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

    a = 100
    b = a
    print(id(a), id(b))  # 140710905766016 140710905766016
    
    a = [10, 20]
    b = a
    print(id(a), id(b))  # 1776360341448 1776360341448
    

    结论3:python中所有的变量都是指针变量。

列表相关函数

  1. 相关函数
    max、min、sun、sorted、len、list
    1)max和min

    max(序列) - 返回列表元素的最大值
    min(序列) - 返回列表元素的最小值

    nums = [90, 89, 67, 29, 789, 2]
    print(max(nums))
    print(min(nums))
    

    2)sum

    sum(序列) - 求序列中所有元素的和(序列中的元素只能是数字)

    print(sum(nums))
    print(sum(range(101)))
    

    3)sorted

    sorted(序列) - 将序列中的元素从小到大排序(升序),以列表的形式返回
    sorted(序列, reverse = True) - 将序列元素从大到小排序(降序),以列表形式返回

    nums = [90, 89, 67, 29, 789, 2]
    new_nums = sorted(nums)
    print(new_nums)  # [2, 29, 67, 89, 90, 789]
    
    new_nums = sorted(nums, reverse=True)
    print(new_nums)  # [789, 90, 89, 67, 29, 2]
    
    1. list

    list()
    list(序列) - 将其他的序列转化成列表(任何序列都可以转换成列表)

    list1 = list('abc')
    print(list1)  # ['a', 'b', 'c']
    
    list2 = list(range(5, 11))
    print(list2)  # [5, 6, 7, 8, 9, 10]
    
  2. 相关方法

    列表.xxx()
    1)列表.clear() - 删除列表中的所有的元素

    song = ['非主流', '杀马特', '洗剪吹']
    song.clear()
    print(song)   # []
    

    2)列表.copy() - 返回一个和原列表一样(长得一样)的新列表
    列表[:]、列表+[]、列表*1

    song = ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    song2 = song.copy()
    print(song2)     # ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    
    song3 = song
    print(song3)    # ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    
    song.append(100)
    print(song3)    # ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    print(song2)    # ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    
    1. 列表.count(元素) - 返回元素在列表中出现的次数
    nums = [34, 15, 84, 8848, 4, 5, 15, 16, 15, 17, 15]
    print(nums.count(15))   # 4
    print(nums.count(100))  # 0
    
    1. 列表.extend(序列) - 将序列中的元素全部添加到列表中
    song = ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    song.extend(['葬爱', '杀鸡'])
    print(song)  # ['非主流', '杀马特', '洗剪吹', '老司机带带我', '葬爱', '杀鸡']
    
    song.extend(range(1,3))
    print(song)  # ['非主流', '杀马特', '洗剪吹', '老司机带带我', '葬爱', '杀鸡', 1, 2]
    

    5)列表.index(元素) - 返回元素在列表中的下标(这的下标是0开始的下标值)

    song = ['非主流', '杀马特', '洗剪吹', '老司机带带我']
    print(song.index('洗剪吹'))  # 2
    
    song = ['非主流', '杀马特', '洗剪吹', '老司机带带我', '洗剪吹']
    print(song.index('洗剪吹'))  # 2
    # print(song.index('马杀鸡'))  # ValueError: '马杀鸡' is not in list
    

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

    song = ['非主流', '杀马特', '洗剪吹', '老司机带带我', '洗剪吹']
    song.reverse()
    print(song)  # ['洗剪吹', '老司机带带我', '洗剪吹', '杀马特', '非主流'] 方法一
    
    song = ['非主流', '杀马特', '洗剪吹', '老司机带带我', '洗剪吹']
    new_song = song[::-1]
    print(new_song)  # ['洗剪吹', '老司机带带我', '洗剪吹', '杀马特', '非主流'] 方法二
    

    7)列表.sort()

    nums = [90, 77, 100, 54, 64, 81]
    nums.sort()
    print(nums)  # [54, 64, 77, 81, 90, 100]
    
    nums = [90, 77, 100, 54, 64, 81]
    new_nums = sorted(nums)
    print(nums)         # [90, 77, 100, 54, 64, 81]
    print(new_nums)     # [54, 64, 77, 81, 90, 100]
    

字典

问题引入:定义一个变量同时保存一个学生的姓名、年龄、身高、体重、分数

用列表:

student = ['迪迦', 30, 178, 70, 89]
print(student[0])

用字典:

student = {'name': '小明', 'age': 30, 'height': 178, 'weight': 70, 'score': 89}
print(student['name'], student['height'])  # 小明 178

1. 什么是字典?(dict)

1)字典是容器型数据类型,将{}作为容器的标志,里面多个元素,{元素都是键值对}用逗号隔开:{键1:值1, 键2:值2, 键3:值3,…}
注意:字典保存数据,其实是想要保存的是值,键的作用是对值进行区分说明的。

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

3)字典的元素 - 必须是键值对
键 - 必须是不可变的数据(一般使用字符串)、唯一的
值 - 任何类型的数据都可以、可以重复

  • {}是空字典
dict1 = {}
print(dict1, type(dict1))  # {} <class 'dict'>
  • 不可变的数据才能作为键

    dict2 = {10: 100, 12.5: 200, 'name': '张三', True: 300}
    print(dict2)  # {10: 100, 12.5: 200, 'name': '张三', True: 300}
    
  • 键是唯一的

    dict4 = {10:100, 20: 200, 10: 300}  # 自动去掉重复的键值对,通常覆盖前面的。
    print(dict4)  # {10: 300, 20: 200}
    
  • 实际开发中的字典:

    students = [
        {'name': '面筋哥', 'age': 18, 'gender': '男', 'tel':'120'},
        {'name': '波澜哥', 'age': 19, 'gender': '男', 'tel':'110'},
        {'name': '犀利哥', 'age': 20, 'gender': '男', 'tel':'119'},
    ]
    

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

dog = {'name': '小明', 'age': 22, 'sex': '男', 'height':180, 'weight':60, 'girlfriend':{
    'name': '小红', 'age': 18, 'sex': '女', 'height': 170, 'weight': 50,
}
       }
print(dog)
print(dog['girlfriend'])

2.字典的增删改查

1.查 - 获取字典的值
1)获取单个值
a.字典[key] - 获取字典中指定key对应的值
b.字典.get(key) - 获取字典中指定key对应的值
c.字典。get(key, 默认值)

film = {'name': '赛罗奥特曼', 'director': '圆谷', 'time':'2008'}
print(film['name'])  # 赛罗奥特曼
print(film['time'])  # 2008
# print(film['age'])   # 报错:KeyError: 'age'

print(film.get('name'))  # 赛罗奥特曼
print(film.get('time'))  # 2008
print(film.get('age'))   # None

print(film.get('name', 0))  # 赛罗奥特曼
print(film.get('time', 0))  # 2008
print(film.get('age', 0))   # 0

2)遍历

for-in 遍历字典的是,变量渠道的是字典的键

film = {'name': '赛罗奥特曼', 'director': '圆谷', 'time':'2008'}
for x in film:
    print(x, end=' ')  # name director time
print()
for x in film:
    print(x, film[x], end=' ')

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

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
girls = 0
for x in range(len(students)):
    if students[x]['gender'] == '女':
        girls += 1
    ages += students[x]['age']
print("女生有{}个,平均年龄为{:.2f}".format(girls, ages/len(students)))    # 方法一

ages = 0
girls = 0
for stu in students:
    if stu['gender'] == '女':
        girls += 1
    ages += stu['age']
print("女生有{}个,平均年龄为{:.2f}".format(girls, ages/len(students)))   # 方法二

avg_age = sum([x['age'] for x in students]) / len(students)
print(avg_age)
girls = [x['gender'] for x in students].count('女')
print(girls)                                                          # 方法三  递推式
  1. 增、改
    字典[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': '白色'}
    

  2. 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
    

3. 字典的相关操作和方法

dict1 = {'a': 10, 'b': 20, 'c': 30}
print(10 in dict1)   # False
print('a' in dict1)  # True
  • 字典的max、min、sum、sort
print(max(dict1))    # c
  • dict

    dict(序列) - 将序列转换成字典

    序列的要求:a.序列中每个元素都是序列
    b.小序列有且只有两个元素
    c.小序列中的第一个不可变

    seq = ['ab', '12', 'a1']
    print(dict(seq))  # {'a': '1', '1': '2'} 注意:此时的'a'是ASCII码
    
    seq = [range(2), ['name', '小明']]
    print(dict(seq))  # {0: 1, 'name': '小明'}
    
  • 字典转列表(所有序列都可以转换成列表)

    dict1 = {'a': 10, 'b': 20, 'c': 30}
    print(list(dict1))   # ['a', 'b', 'c']
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值