大学排行榜分析---Python

文章介绍了几个Python函数,用于处理两个排行榜(按学校名)的前m名数据,包括在两个榜单中均在前m的学校、全部在前m的学校、仅在alumni榜上以及不同时出现在两个榜单的学校排名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

path = '/data/bigfiles/'    # 路径 不然会出现报错
def read_file(file, m):
    """读文件中的学校名到列表中,返回前m个记录的学校集合"""
    with open(path + file, 'r',encoding='utf-8') as f:
        lines=[]
        for i in range(m):
            line=f.readline().strip("\n")
            lines.append(line.split()[1])#对一行的字符串内容分割成列表,取这个列表索引位置1的元素
    return lines


def either_in_top(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在这两个排行榜中均在前m个记录的学校名,按照学校名称排序,
    返回排序后的列表
    """
    result=[]
    for i in range(len(alumni)):
        if alumni[i] in soft:#如果同时在两个表中都有这个学校
            result.append(alumni[i])
    result.sort()#升序排序
    return result


def all_in_top(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在两个榜单中名列前m的所有学校名,按照学校名称排序,
    返回排序后的列表
    """
    result=[]
    result.extend(alumni)#列表合并alumni
    result.extend(soft)#列表合并soft
    result=list(set(result))#列表去重
    result.sort()#升序排序
    return result


def only_alumni(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在alumni榜单中名列前m但soft榜单中未进前m的学校名,
    按照学校名称排序,返回排序后的列表
    """
    result=[]
    for i in range(len(alumni)):
        if alumni[i] in soft:
            continue
        else:#如果在alumni榜单中名列前m但soft榜单中未进前m的学校名
            result.append(alumni[i])
    result.sort()#升序排序
    return result


def only_once(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在alumni和soft榜单中名列前m,但不同时出现在两个榜单的学校名,
    按照学校名称排序,返回排序后的列表
    """
    result=[]
    for i in range(len(alumni)):
        if alumni[i] in soft:
            continue
        else:#如果在alumni榜单中名列前m但soft榜单中未进前m的学校名
            result.append(alumni[i])
    for i in range(len(soft)):
        if soft[i] in alumni:
            continue
        else:#如果在soft榜单中名列前m但alumni榜单中未进前m的学校名
            result.append(soft[i])
    result.sort()#升序排序
    return result


def judge(n):
    if n in '1234':
        m = int(input())
        alumni_set = read_file('./alumni.txt', m)
        soft_set = read_file('./soft.txt', m)
        if n == '1':
            either_rank = either_in_top(alumni_set, soft_set)
            print(f'两榜单中均名列前{m}的学校:')
            print(either_rank)
        elif n == '2':
            all_rank = all_in_top(alumni_set, soft_set)
            print(f'两榜单名列前{m}的所有学校:')
            print(all_rank)
        elif n == '3':
            only_in_alumni_rank = only_alumni(alumni_set, soft_set)
            print(f'alumni中名列前{m},soft中未进前{m}的学校:')
            print(only_in_alumni_rank)
        elif n == '4':
            alumni_soft_rank = only_once(alumni_set, soft_set)
            print(f'不同时出现在两个榜单前{m}的学校:')
            print(alumni_soft_rank)
    else:
        print('Wrong Option')


if __name__ == '__main__':
    num = input()
    judge(num)

x = set('runoob')
y = set('google')
print(x)        #重复的被删除
print(y)        #重复的被删除
print(x&y)      #返回一个新的集合,包括同时在集合 x 和y中的共同元素。
print(x|y)      #返回一个新的集合,包括集合 x 和 y 中所有元素。
print(x^y)      #返回一个新的集合,包括集合 x 和 y 的非共同元素。
print(x-y)      #返回一个新的集合,包括在集合 x 中但不在集合 y 中的元素。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值