day07 列表和字典作业

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]
import random
list1=[]
for x in range(10):
    list1.append(random.randint(1,1000))
print(list1)

for _ in range(len(list1)):
    x=list1.pop()
    if x not in list1:
        list1.insert(0,x)
list1.sort(reverse=True)
print(list1)

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

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

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

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

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

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

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

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


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

""" 
3,因为nums赋值给nums2的是列表的地址,nums和nums2指向同一个地址上的列表
对nums2,操作,也就是对nums操作
"""

numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.cop
print(numlist is nums3) # 结果  原因是什么
"""
False 因为copy是在内存里开辟了一个新的空间,存放numlist一模一样的列表num3
两个列表相等,但是地址不同,代表着两个列表,而is是判断是否是同一个列表

"""

numlist[-1][0] = 99
print(nums3) # num3会不会发生变化
"""
会,numlist里的子列表是存的地址,copy过去的也是地址
numlist改变,nums3也改变
"""

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

​ b.打印不及格学生的名字和对应的成绩
​ c.统计未成年学生的个数
​ d.打印手机尾号是8的学生的名字
​ e.打印最高分和对应的学生的名字

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

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

students = [{'name': 'stu1', 'age': 19, 'score': 78, 'tel': '110', 'gender': '女'},
            {'name': 'stu2', 'age': 22, 'score': 99, 'tel': '118', 'gender': '不明'},
            {'name': 'stu3', 'age': 23, 'score': 77, 'tel': '112', 'gender': '男'},
            {'name': 'stu4', 'age': 11, 'score': 90, 'tel': '114', 'gender': '女'},
            {'name': 'stu5', 'age': 20, 'score': 56, 'tel': '117', 'gender': '不明'},
            {'name': 'stu6', 'age': 18, 'score': 30, 'tel': '118', 'gender': '女'},

            ]
# a.统计不及格学生的个数
list7 = [x['score'] for x in students if x['score'] < 60]
print(len(list7))

# b.打印不及格学生的名字和对应的成绩
for x in students:
    if x['score'] < 60:
        print(x['name'], x['score'])
        
# c.统计未成年学生的个数
list8 = [x['age'] for x in students if x['age'] < 18]
print(len(list8))

# d.打印手机尾号是8的学生的名字
list9 = [x['name'] for x in students if list(x['tel'])[-1] == '8']
print(list9)
	
# e.打印最高分和对应的学生的名字
# 方法-:
max_socre = max(x['score'] for x in students)
names = [x['name'] for x in students if x['score'] == max_socre]
print(names)
# 方法二:
result = max(students,key = lambda x:x['name'])

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

for x in students:
    if x['gender'] == '不明':
        students.remove(x)
print(students)
# 此方法可行----才怪!!!!remove之后列表改变,删掉第一个
# 第二次循环从原列表的第三个继续循环。也就是说遍历拿不到所有元素
# 解决方法,copy一个,备份,遍历备份,删原来的


#来看用筛选推导式做
list10=[x for x in students if x['gender']!= '不明']
print(list10)

#g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
# 不装了,俺会高级函数,算法不管了,直接一句真言
new_students = sorted(students,key=lambda x:x['age'],reverse=True)
print(new_students)

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页