day6-列表和元组

总结

1. 列表相关函数和方法
  1. 列表相关函数: max, min, sum, len, sorted, reversed, list
  • max(序列) - 获取列表中最大的元素(序列中的元素本身必须支持比较运算, 并且元素之间可以比较大小)

    nums = [89, 123, 64, 76, 99, 521, 367, 86, 153, 489]
    print(max(nums))  # 521
    
  • min(序列) - 获取序列中最小的元素

    nums = [89, 123, 64, 76, 99, 521, 367, 86, 153, 489]
    print(min(nums))  # 64
    
  • sum(序列) - 求序列中所有元素的和(序列中的元素必须是数字)

    nums = [89, 123, 64, 76, 99, 521, 367, 86, 153, 489]
    print(sum(nums))   # 2067
    print(sum(range(1, 101)))  # 5050
    
  • len(序列) - 求序列中元素的个数

    print(len([10, 20,'abc', [10, 20], range(3)])) # 5
    
  • sorted(序列) - 将序列中的元素从小到大排序,返回一个排完序以后的新列表

  • sorted(序列, reverse=True) - 将序列中的元素从大到小排序, 返回一个排完序以后的新列表

    nums = [89, 123, 64, 76, 99, 521, 367, 86, 153, 489]
    new_nums = sorted(nums)
    print(new_nums)  # [64, 76, 86, 89, 99, 123, 153, 367, 489, 521]
    new_nums = sorted(nums, reverse=True)
    print(nums, new_nums)  # [521, 489, 367, 153, 123, 99, 89, 86, 76, 64]
    
  • reversed(序列) - 将序列中的元素倒序,产生一个新的迭代器

    nums = [89, 123, 64, 76, 99, 521, 367, 86, 153, 489]
    new_nums = reversed(nums)
    print(new_nums)  # <list_reverseiterator object at 0x000001F4CF7D6940>
    print(list(new_nums))  # [489, 153, 86, 367, 521, 99, 76, 64, 123, 89]
    # 切片倒序
    print(nums[::-1])   # [489, 153, 86, 367, 521, 99, 76, 64, 123, 89]
    
  • list(序列) - 将其他序列转换成列表

    print(int(2.4), int(True), int('123'), float(3e4))  # 2 1 123 30000.0
    print(list('abc'))   # ['a', 'b', 'c']
    print(list(range(1, 3)))   # [1, 2]
    
  1. 列表相关方法
  • 列表.clear() - 清空列表

    names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
    names.clear()
    print(names)   # []
    
  • 列表.copy() - 赋值原列表产生一个一模一样的新列表

    names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
    new_names = names.copy()
    print(new_names)  # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
    
  • 列表.conut(元素) - 统计指定元素在列表中出现的次数

    names = ['罗小黑战记', '海贼王', '一人之下', '海贼王', '进击的巨人', '死亡笔记', '海贼王', ]
    print(names.conut('死亡笔记'))  # 1
    print(names.conut('死神'))     # 0
    print(names.conut('海贼王'))   # 3
    
  • 列表.extend(序列) - 将序列中所有的元素都添加到列表中

    names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记']
    names.extend(['妖精的尾巴', '火影忍者'])
    print(names)  # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '妖精的尾巴', '火影忍者']
    names.extend(['abc', 'xy', 12])
    print(names)  # # ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '妖精的尾巴', '火影忍者', 'abc', 'xy', 12]
    
  • 列表.index - 获取指定元素对应的下标(从0开始的下标)

    names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '海贼王']
    print(names.index('一人之下'))  # 2
    print(names.index('海贼王'))   # 1
    
  • 列表.reverse() - 将列表倒序(不会产生新的列表)

    names = ['罗小黑战记', '海贼王', '一人之下', '进击的巨人', '死亡笔记', '海贼王']
    names.reverse()
    print(names)  # ['海贼王', '死亡笔记', '进击的巨人', '一人之下', '海贼王', '罗小黑战记']
    
  • 列表.sort() - 将列表元素从小到大排序

    nums = [89, 123, 64, 76, 99, 521, 367, 86, 153, 489]
    new_nums = nums.sort()
    print(nums)   # [64, 76, 86, 89, 99, 123, 153, 367, 489, 521]
    print(new_nums) # None
    
2. 列表推导式
  1. 推导式通用格式1: [表达式 for 变量 in 序列]

    list1 = [x for x in range(4)]
    print(list1)   # [0, 1, 2, 3]
    list2 = [2*x + 3 for x in range(4)]
    print(list2)   # [3, 5, 7, 9]
    list3 = [2*x for x in 'abc']
    print(list3)   # ['aa', 'bb', 'cc']
    

    练习: 已知列表scores = [89, 34, 56, 23, 90, 100],将列表中的成绩转换成十分制的值

    scores = [89, 34, 56, 23, 90, 100]
    new_scores = [x/10 for x in scores]
    print(new_scores)  # [8.9, 3.4, 5.6, 2.3, 9.0, 10.0]
    
  2. 推导式通用格式2: [表达式 for 变量 in 序列 if 条件语句]

    nums = [12, 89, 98, 67, 23, 44, 60, 53, 99, 38, 31]
    new_nums = [x for x in nums if x % 2 == 1]
    print(new_nums)   # [89, 67, 23, 53, 99, 31]
    

    练习: 删除列表中所有的空值和0值

    list1 = [12, 'abc', True, 0, 0.00, 0.02, '', [], [1, 2]]
    new_list1 = [x for x in list1 if x]
    print(new_list1)  # [12, 'abc', True, 0.02, [1, 2]]
    
  3. 补充: 三目运算符

  • C的三目运算:表达式1?表达式2:表达式3 -> 如果表达式1的值是0整个运算表达式的结果是表达式3,否则整个运算表达式的值是表达式2

  • python的三目运算:变量 = 表达式2 if 表达式1 else 表达式3 -> 如果表示1的值是True整个运算表达式的结果是表达式1,否则是表达式3

    age = 27
    result = '成年' if age >= 18 else '未成年'
    print(result)   # 成年
    

    scores = [89, 34, 56, 23, 90, 100] -> 变成’及格’或者’不及格’

    scores = [89, 34, 56, 23, 90, 100]
    new_scores = ['不及格' if x <= 60 else '及格' for x in scores]
    print(new_scores)   # ['及格', '不及格', '不及格', '不及格', '及格', '及格'] 
    
3. 元组
  1. 什么是元组(tuple)

    元组是容器型数据类型(序列),将小括号()作为容器标志,里面多个元素用逗号隔开:(元素1, 元素2, 元素3, 元素4…)
    元组是不可变的(不支持增删改),元组是有序的(支持下标操作)
    任何类型的数据都可以作为元组的元素

  • 空元组

    t1 = ()
    print(t1, type(t1), len(t1))  # () <class 'tuple'> 0
    
  • 普通元组

    t2 = (100)
    print(t2, type(t2))   # 100 <class 'int'>
    t3 = (100,)
    print(t3, type(t3))   # (100,) <class 'tuple'>
    
  1. 元组就是不可变的列表

    列表中凡是和增删改不想关的操作元组都支持

  • t5 = ('肖申克的救赎', '阿甘正传', '霸王别姬', '美丽人生', '黑客帝国', '触不可及', '这个杀手不太冷', 'V字仇杀队')
    print(t5[1])   # 阿甘正传
    print(t5[-1])  # V字仇杀队
    print(t5[:])   # ('肖申克的救赎', '阿甘正传', '霸王别姬', '美丽人生', '黑客帝国', '触不可及', '这个杀手不太冷', 'V字仇杀队')
    print(t5[3:0])  # ()
    print(t5[2:-2:2])  # ('霸王别姬', '黑客帝国')
    l1 = [1, 2, 3]
    result = l1 + [10, 20]
    print(result)   # [1, 2, 3, 10, 20]
    
    t6 = (10, 20)
    print(t6 + (100, 200))  # (10, 20, 100, 200)
    print(t6*3)   # (10, 20, 10, 20, 10, 20)
    print(1 in t6)   # False
    print(10 in t6)  # True
    
  • max, min, sum, sorted, reversed, len, tuple

    scores = (98, 78, 67, 56, 23, 45, 99, 82, 86)
    print(max(scores))   # 99
    print(min(scores))   # 23
    print(sum(scores))   # 634
    print(sorted(scores))  # [23, 45, 56, 67, 78, 82, 86, 98, 99]
    print(tuple('abc'))    # ('a', 'b', 'c')
    print(tuple([10, 20, 30]))  # (10, 20, 30)
    
  • 相关方法: conut, index

    print(scores.count(99))  # 1
    print(scores.index(56))  # 3
    
  1. 元组不只是不可变的列表
  • 元组的()在没有歧义的情况下可以去掉

    t1 = 10, 20, 30, 40
    print(t1, type(t1))  # (10, 20, 30, 40) <class 'tuple'>
    t2 = 10, 20, 30, 40*2
    print(t2, type(t2))  # (10, 20, 30, 80) <class 'tuple'>
    
  • 获取元组元素:变量个数和元组中元素个数一致

    point1 = (10, 98)
    print(point1[0], point1[1])  # 10 98
    x, y = point1
    print(x, y)  # 10 98
    
    point2 = (-19, 89, 29)
    x, y, z = point2
    print(x, y, z)   # -19 89 29
    
  1. 获取元组元素:让变量个数小于元组中元素的个数,但是必须在某一个变量前加*(只能在一个变量前加*)列表和元组都支持

    先让不带的变量按照位置取获取元组中的元素,然后让剩下的元素全部作为一个列表返回给带的变量

    t2 = (100, 200, 'abc', '男', 'True', 300)
    *x, y, z = t2
    print(y, z)   # True 300
    print(x)      # [100, 200, 'abc', '男']
    x, y, *z = t2
    print(x, y)   # 100 200
    print(z)      # ['abc', '男', 'True', 300]
    x, *y, z = t2
    print(x, z)   # 100 300
    print(y)      # [200, 'abc', '男', 'True']
    x, *y, z, t = t2
    print(y)      # [200, 'abc', '男']
    

作业

1.创建一个列表,列表中有10个数字, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序. 例如:随机生成了[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
— 去重之后 [70, 88, 91, 107, 234, 177, 282, 197]
---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]

nums = [70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
new_nums = []
for x in nums:
    if x not in new_nums:
        new_nums.append(x)
new_nums = sorted(new_nums, reverse=True)
print(new_nums)

2.利用列表推导式, 完成以下需求

a. 生成一个存放1-100中各位数为3的数据列表, 结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]

nums = [x for x in range(1, 101) if x % 10 == 3]
print(nums)

b. 利用列表推到是将 列表中的整数提取出来, 例如:[True, 17, “hello”, “bye”, 98, 34, 21] — [17, 98, 34, 21]

list1 = [True, 17, "hello", "bye", 98, 34, 21]
new_list1 = [x for x in list1 if type(x) in [int]]
print(new_list1)

c.利用列表推导式 存放指定列表中字符串的长度, 例如: [“good”, “nice”, “see you”, “bye”] — [4, 4, 7, 3]

list1 = ["good", "nice", "see you", "bye"]
new_list1 = [len(x) for x in list1]
print(new_list1)

d. 利用列表推导式删除列表中整数个位数小于5的元素, 例如:[24, ‘abc’, 99, True, 21, 38, ‘hello’] — [‘abc’, 99, True, 38, ‘hello’]

list1 = [24, 'abc', 99, True, 21, 38, 'hello']
new_list1 = [x for x in list1 if type(x) not in [int] or x % 10 >= 5]
print(new_list1)

e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素, 例如:[(10, 20, 30), (‘abc’, ‘hello’), (1, 2, 3.4), (True, False)] — [30, ‘hello’, 3.4, False]

list1 = [(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
new_list1 = [x[-1] for x in list1]
print(new_list1)

3.已知代码如下,请回答出各个print的结果 并说明原因

nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums)) # 这个结果是什么   请描述原因  结果是3,nums直接给nums2赋值的时候赋的地址,赋值后nums和nums2指向同一块内存区域
numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 结果  原因是什么  结果是False 因为列表.copy()赋值原列表产生一个一模一样的新列表,数据储存的位置也是不一样的
numlist[-1][0] = 99
print(nums3) # num3会不会发生变化 [17, 22, 39, 58, [99, 43]]

4(试一下). 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字

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

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

students = [
    {'姓名':'小明','年龄':20,'成绩':100,'电话':102311111,'性别':'男',},
    {'姓名':'小日','年龄':10,'成绩':80,'电话':102322228,'性别':'不明',},
    {'姓名':'小月','年龄':12,'成绩':90,'电话':102333333,'性别':'女',},
    {'姓名':'小红','年龄':13,'成绩':92,'电话':102344448,'性别':'女',},
    {'姓名':'小绿','年龄':14,'成绩':90,'电话':102355555,'性别':'男',},
    {'姓名':'小蓝','年龄':17,'成绩':50,'电话':102366666,'性别':'男',},
]
# a.统计不及格学生的个数
conuts = len([x for x in students if x['成绩'] < 60])
print(conuts)
# b.打印不及格学生的名字和对应的成绩
students1 = [x for x in students if x['成绩'] < 60]
print(x['姓名'], x['成绩'])
# c.统计未成年学生的个数
conuts = len([x for x in students if x['年龄'] < 18])
print(conuts)
# d.打印手机尾号是8的学生的名字
names = [x['姓名'] for x in students if x['电话'] % 10 == 8]
print(names)
# e.打印最高分和对应的学生的名字

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值