day06-序列相关函数以及推导式

总结

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

    nums = list(range(10))
    max_num = max(nums) 
    print(max_num)      # 9
    
  2. min - 获取最小值,需要序列中的元素本身必须支持比较运算,并且元素之间可以比较大小

    nums = list(range(10))
    min_num = min(nums)   
    print(min_num)      # 0
    
  3. sum - 获取序列中所有值的和(序列中所有元素必须是数字)

    nums = list(range(10))
    sum1 = sum(nums)    
    print(sum1)   # 45
    
  4. len - 统计序列中元素的个数

    nums = list(range(10))
    nums_len = len(nums)   
    print(nums_len)     # 10
    
  5. sorted - 将序列中的元素从小到大排序,返回一个排完序后的新列表

    import random
    
    nums = list(rang(10))
    random.shuffle(nums)
    nums_sort = sorted(nums)       
    print(nums, nums_sort)        # [1, 6, 0, 2, 4, 3, 7, 5, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  6. reversed - 将序列中的元素倒序,产生一个新的迭代器

    reversed_nums = reversed(nums)
    print(reversed_nums)		# <list_reverseiterator object at 0x0000020DB4AA6640>
    
  7. list - 将其它序列转化为列表

    print(list('abc'))    # ['a', 'b', 'c']
    
列表相关方法
  1. 列表.clear() - 清空列表

    ls = list(range(10))
    print(ls)       # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    ls.clear()
    print(ls)       # []
    
  2. 列表.copy() - 复制原列表,返回一个新的一摸一样的列表

    ls = [x for x in range(10)]
    new_ls = ls.copy()
    print(new_ls)   # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  3. 列表.count(元素) - 统计列表中指定元素出现的次数

    ls = [x for x in range(10)] + [x for x in range(20)]
    print(ls)
    print(ls.count(9))      # 2
    
  4. 列表.extend(序列) - 将序列中所有的元素都添加到列表中

    names = ['一人之下', '海贼王', '狐妖小红娘', '死亡笔记']
    names.extend(('端脑', '锦绣山河', '刺客五六七'))
    print(names)        # ['一人之下', '海贼王', '狐妖小红娘', '死亡笔记', '端脑', '锦绣山河', '刺客五六七']
    
  5. 列表.index(元素) - 获取元素指定的下标

    names = ['狐妖小红娘', '一人之下', '海贼王', '狐妖小红娘', '死亡笔记']
    print(names.index('狐妖小红娘'))     # 0(第一个相同元素的下标值)
    # print(names.index('刺客五六七'))     # ValueError: '刺客五六七' is not in list
    names.insert(0, '铠甲勇士')
    print(names)	# ['铠甲勇士', '狐妖小红娘', '一人之下', '海贼王', '狐妖小红娘', '死亡笔记']
    
  6. 列表.reverse() - 将列表倒序(不会产生新的列表)

    names.reverse()
    print(names)		# ['死亡笔记', '狐妖小红娘', '海贼王', '一人之下', '狐妖小红娘', '铠甲勇士']
    
  7. 列表.sort() - 将列表元素从小到大排序

    names.sort()
    print(names)		# ['一人之下', '死亡笔记', '海贼王', '狐妖小红娘', '狐妖小红娘', '铠甲勇士']
    
列表推导式的应用
  1. [表达式 for 变量 in 序列]

    '''
    创建列表的原理
    list1 = []
    for 变量 in 序列:
        list1.append(表达式)
    '''
    
    list1 = [x*2 + 4 for x in range(10)]
    print(list1)        # [4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
    list2 = [x*2 for x in 'abcdse']
    print(list2)        # ['aa', 'bb', 'cc', 'dd', 'ss', 'ee']
    # 练习:已知列表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. [表达式 for 变量 in 序列 if 条件语句]

    '''
    原理:
    list1 = []
    for 变量 in 序列:
        if 条件语句:
            list1.apppend(变量)
    '''
    
    nums = [23, 89, 98, 67, 23, 44, 60]
    new_nums = [x for x in nums if x % 2]
    print(new_nums)     # [23, 89, 67, 23]
    
    # 练习:删除列表中所有的空值和0值
    list1 = [12, 'abc', True, 0, 0.00, 0.02, '', [], [1, 2]]
    list2 = [x for x in list1 if x]
    print(list2)        # [12, 'abc', True, 0.02, [1, 2]]
    
  3. 三目运算符

    '''
    c语言:
    条件表达式 ? 表达式1 : 表达式2    ===>  如果条件表达式的结果是0则执行表达式2,否则执行表达式1
    python语言:
    表达式2 if 表达式1 else 表达式3   ====>  如果表达式1的结果为True则执行表达式2,否则执行表达式3
    '''
    # 练习:已知列表scores = [89, 34, 56, 23, 90, 100],将列表中的成绩转化成'及格'和'不及格'
    scores = [89, 34, 56, 23, 90, 100]
    grade = ['及格' if x >= 60 else '不及格' for x in scores]
    print(grade)		# ['及格', '不及格', '不及格', '不及格', '及格', '及格']
    

作业

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 num in nums:
    if num not in new_nums:
        new_nums.append(num)
new_nums.sort(reverse=True)
print(new_nums)

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

a. 生成一个存放1-100中各位数为3的数据列表

结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
list1 = [x for x in range(3, 100, 10)]
print(list1)

b. 利用列表推到是将 列表中的整数提取出来

例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
ls = [True, 17, "hello", "bye", 98, 34, 21]
list1 = [x for x in ls if type(x) == int]
print(list1)

c.利用列表推导式 存放指定列表中字符串的长度

例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
ls = ["good", "nice", "see you", "bye"]
list1 = [len(x) for x in ls]
print(list1)

d. 利用列表推导式删除列表中整数个位数小于5的元素

例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
ls = [24, 'abc', 99, True, 21, 38, 'hello']
list1 = [x for x in ls if type(x) != int or x % 10 >= 5]
print(list1)

e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素

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

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

nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums)) # 这个结果是什么   请描述原因
# 结果是3,nums2与nums指向同一块内存,当操作nums2时,nums的数据也会一同更改

numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 结果  原因是什么
# 结果是:False。原因numlist与nums3不是指向同一块内存
numlist[-1][0] = 99
print(nums3) # num3会不会发生变化
# 会改变,因为numlist与nums3中对与[55, 43]保存的都是该列表地址,所以改变numlist中[55, 43]的值,nums3中的值也会改变

4(试一下). 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

students = [
    {
        'name': '小明',
        'age': 18,
        'score': 90,
        'phone': 17342347856,
        'sex': '男'
    },
    {
        'name': '小东',
        'age': 21,
        'score': 57,
        'phone': 17342787858,
        'sex': '男'
    },
    {
        'name': '小红',
        'age': 16,
        'score': 47,
        'phone': 17390347762,
        'sex': '女'
    },
    {
        'name': '小何',
        'age': 22,
        'score': 68,
        'phone': 17342986475,
        'sex': '女'
    },
    {
        'name': '小玖',
        'age': 17,
        'score': 92,
        'phone': 17342876498,
        'sex': '不明'
    },
    {
        'name': '小晴',
        'age': 26,
        'score': 93,
        'phone': 15242398743,
        'sex': '女'
    }
]

​ a.统计不及格学生的个数

failed_stus = [x for x in students if x['score'] < 60]
print('不及格学生人数:', len(failed_stus))

​ b.打印不及格学生的名字和对应的成绩

for student in failed_stus:
    print('name:', student['name'], 'score:', student['score'])

​ c.统计未成年学生的个数

minors = [x for x in students if x['age'] < 18]
print('未成年学生个数:', len(minors))

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

stus = [x for x in students if x['phone'] % 10 == 8]
for stu in stus:
    print('手机尾数是8的学生的姓名:', stu['name'])

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

scores = [x['score'] for x in students]
max_score = max(scores)
stus = [x for x in students if x['score'] == max_score]
for stu in stus:
    print('最高分是:', max_score, '对应的学生姓名:', stu['name'])

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

stus = [x for x in students if x['sex'] != '不明']
print(stus)

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

# 方法一:
scores.sort(reverse=True)
stus = []
for score in set(scores):
    stus.extend([x for x in students if x['score'] == score])
print(stus)

# 方法二:
def takeSecond(elem):
    return elem['score']


students.sort(key=takeSecond, reverse=True)
print(students)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值