2021.1.27day7-列表和字典作业

本文介绍了Python编程中列表的常见操作,包括创建、去重、排序,以及如何利用列表推导式进行条件筛选。通过示例展示了如何统计不及格、未成年学生数量,查找特定条件的学生信息,并进行数据过滤。同时,讨论了列表操作时的注意事项,如避免在遍历过程中修改列表。
摘要由CSDN通过智能技术生成

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]
a = [70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
b = []
for x in a:
    if x not in b:
        b.append(x)
print(b)         # [70, 88, 91, 107, 234, 177, 282, 197]
print(sorted(b,reverse=True)) # [282, 234, 197, 177, 107, 91, 88, 70]

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

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

结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
listing = [x for x in range(1,101) if x % 10 == 3]
print(listing)  # [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]

法二:
nums = [x for x in range(3,101,10)]

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

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

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

例如 ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
listing = ["good", "nice", "see you", "bye"]
lenth = [len(x) for x in listing]
print(lenth)   #  [4, 4, 7, 3]

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


nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums)) # 这个结果是什么   请描述原因

(1)nums = [17, 39, 28, 51]
(2)nums2 = nums,把nums赋值给nums2,两个变量有相同的地址
(3)nums2.pop()->nums2取出最后一个数,因为nums与nums2有相同的地址,所以其中一个改变,宁一个也会跟着改变,相当于nums也取出最后一个数
(4)print(len(nums))  ->输出结果3

numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 结果  原因是什么

numlist.copy()是拷贝numlist,但是有不同的地址,所以nums3与numlist有不同的地址,而is比较的是两个对象的内存空间地址是否相同,所以输出False


numlist[-1][0] = 99
print(nums3) # num3会不会发生变化
会,numlist.copy浅拷贝只拷贝了外面,所以里面一个变另一个会跟着变  

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

students_message = [
    {'姓名':'小王', '年龄':18, '成绩':87, '电话':101,'性别':'男'},
    {'姓名':'小赵', '年龄':17, '成绩':79, '电话':123,'性别':'女'},
    {'姓名':'小杨', '年龄':16, '成绩':55, '电话':157,'性别':'不明'},
    {'姓名':'小李', '年龄':20, '成绩':90, '电话':168,'性别':'男'},
    {'姓名':'小徐', '年龄':17, '成绩':57, '电话':145,'性别':'不明'},
    {'姓名':'小郑', '年龄':19, '成绩':95, '电话':138,'性别':'男'},
]

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

stu = [x['成绩'] for x in students_message if x['成绩'] < 60]
print(len(stu))
  # 2

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

grade = [stu['成绩'] for stu in students_message if stu['成绩'] < 60 ]
for x in students_message:
    if x['成绩'] < 60:
        print(x['姓名'], x['成绩']) 
       
 小杨 55
 小徐 57                                    

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

teenager = [stu['年龄'] for stu in students_message if stu['年龄'] < 18 ]
print(len(teenager))
   # 3

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

tel8 = [stu['电话'] for stu in students_message if stu['电话'] % 10 == 8]
for x in students_message:
    if x['电话'] % 10 == 8:
        print(x['姓名'], x['电话'])

# 电话尾号为8 ['小李', '小郑']

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

max_score = max([stu['成绩'] for stu in students_message])
names = [x['name'] for x in students_message if x['score'] == max_score]
print(names, max_score)

# 法二(针对最高分只有一个时)
result = max(students_message, key = lambda x:x['age'])
print(result)

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

for x in students_message:
    if x['性别'] == '不明':
        students_message.remove(x)
print(students_message)

该方法不适用因为遍历不全删不干净:
列:
nums = [10,89,34,30,97]
for x in nums:
	if x < 60:
		nums.remove(x)
执行过成:
(1)x = 10->nums = [89,34,30,97]
(2)x = 34->nums = [89,30,97]
(3)x = 97->nums = [89,30,97]
因为for循环按照列表第一个第二个....循环

修改:
nums = [10,89,34,30,97]
temp = nums[:] # nums[:]是对nums进行切片操作再赋值给temp
for x in temp:
	if x < 60:
		nums.remove(stu)
print(nums)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值