Python第七次课堂作业:去重复名、歌手得分计算和统计重复次数

一、去重复名

_lst1 = ["刘一", "陈二", "张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十"]
_lst2 = ["陈甲", "李乙", "陈二", "张丙", "赵六", "刘一", "黄丁", "何卯"]

# 1. 普通去重
_lst3 = _lst1 + _lst2
_lst4 = []
for i in _lst3:
    if i not in _lst4:
        _lst4.append(i)
print(f"【普通去重】共有 {len(_lst4)} 人安排到一起坐,分别是:", _lst4)

# 2. 使用集合去重
_lst3 = list(set(_lst1 + _lst2))
print(f"【集合去重】共有 {len(_lst3)} 人安排到一起坐,分别是:", _lst3)

# 3. 使用字典去重
_lst3 = list(dict.fromkeys(_lst1 + _lst2))
print(f"【字典去重】共有 {len(_lst3)} 人安排到一起坐,分别是:", _lst3)

# 4. 使用集合推导式去重
_lst3 = {i for i in (_lst1 + _lst2)}
print(f"【集合推导式去重】共有 {len(_lst3)} 人安排到一起坐,分别是:", list(_lst3))

# 5. 使用字典推导式去重
_lst3 = {i: 0 for i in (_lst1 + _lst2)}
print(f"【字典推导式去重】共有 {len(_lst3)} 人安排到一起坐,分别是:", list(_lst3.keys()))


# 6. 使用递归去重
def remove_duplicate(_lst, index):
    if index < 0:
        return _lst
    if _lst[index] in _lst[:index]:
        _lst.pop(index)
    return remove_duplicate(_lst, index - 1)


_lst3 = _lst1 + _lst2
_lst4 = remove_duplicate(_lst3, len(_lst3) - 1)
print(f"【递归去重】共有 {len(_lst4)} 人安排到一起坐,分别是:", _lst4)

在这里插入图片描述

二、歌手得分计算

_list = [9.8, 9.5, 9.2, 9.3, 8.9, 9.5, 9.6, 9.3, 9.4, 9.6]

# 题目:去掉一个最高分和最低分,求平均分
# 1. 普通方法
_list.remove(max(_list))
_list.remove(min(_list))
print("【普通方法】最终得分为:%.2f" % (sum(_list) / len(_list)))

# 2. 排序后去除最高分和最低分,再求平均分
_list.sort()
_list = _list[1:-1]
print("【排序后去除最高分和最低分】最终得分为:%.2f" % (sum(_list) / len(_list)))


# 3. 使用递归去除最高分和最低分,再求平均分
def remove_max_min(_lst, index, max_index, min_index):
    if index < 0:
        _lst.pop(max_index)
        _lst.pop(min_index)
        return _lst
    if _lst[index] > _lst[max_index]:
        max_index = index
    if _lst[index] < _lst[min_index]:
        min_index = index
    return remove_max_min(_lst, index - 1, max_index, min_index)


_list = remove_max_min(_list, len(_list) - 1, 0, 0)
print("【递归去除最高分和最低分】最终得分为:%.2f" % (sum(_list) / len(_list)))

在这里插入图片描述

三、统计重复次数

import random

# 题目:随机产生20个10以内的正整数组成一个列表,并统计重复次数最多的是哪个数
list1 = [random.randint(1, 10) for i in range(20)]
print("原来的列表是:", list1)

# 方法一:字典统计每个元素出现的次数,然后统计出现次数最多的元素
dict1 = {}
for i in list1:
    dict1[i] = dict1.get(i, 0) + 1
print(dict1)  # key是元素,value是出现的次数
list2 = list(dict1.items())
# 使用lambda表达式,按照value排序
list2.sort(key=lambda x: x[1], reverse=True)  # reverse=True表示降序
print(list2)

# 使用堆栈判断是否有多个元素出现的次数一样多,如果有,就输出
stack = [list2[0]]
for i in range(1, len(list2)):
    if list2[i][1] == stack[i - 1][1]:
        # 如果出现的次数一样多,就添加到堆栈中
        stack.append(list2[i])
    else:
        break
stack = [str(i[0]) for i in stack]
print("出现次数最多的元素是:" + ",".join(stack))

# 方法二:使用集合去重,然后统计出现次数最多的元素
_set = set(list1)
max_value = []
max_count = 0
for i in _set:
    if list1.count(i) > max_count:
        max_value = [str(i)]
        max_count = list1.count(i)
    elif list1.count(i) == max_count:
        max_value.append(str(i))
print("出现次数最多的元素是:" + ",".join(max_value))

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值