精华内容
下载资源
问答
  • 2022-03-28 21:26:06

    题目描述

    某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 名学生发奖学金。期末,每个学生都有 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。

    任务:先根据输入的 3 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前 5 名学生的学号和总分。注意,在前 5 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:

     7 279
     5 279

    这两行数据的含义是:总分最高的两个同学的学号依次是 7 号、5 号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和),但学号为 7 的学生语文成绩更高一些。如果你的前两名的输出数据是:

     5 279
     7 279

    则按输出错误处理,不能得分。

    输入描述

    第 1 行为一个正整数 n (6 <= n <= 300),表示该校参加评选的学生人数。

    第 2 到 n+1行,每行有 3个用空格隔开的数字,每个数字都在 0 到 100 之间。第 j行的 3 个数字依次表示学号为 j-1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1~ n(恰好是输入数据的行号减 1)。

    所给的数据都是正确的,不必检验。

    输出描述

    输出共有 5行,每行是两个用空格隔开的正整数, 依次表示前 5 名学生的学号和总分。

    输入输出样例

    示例 1

    输入

     6
     90 67 80
     87 66 91
     78 89 91
     88 99 77
     67 89 64
     78 89 98

    输出

     6 265
     4 264
     3 258
     2 244
     1 237

    示例 2

    输入

     8
     80 89 89
     88 98 78
     90 67 80
     87 66 91
     78 89 91
     88 99 77
     67 89 64
     78 89 98

    输出

     8 265
     2 264
     6 264
     1 258
     5 258

    解题思路:
    利用嵌套列表字典将值存储好之后,使用python自带的itemgetter模块实现多关键字排序
    注意事项:

    • 题目中其他两个成绩是从大到小,而id是小的优先,顺序不一样,为了统一处理,我在赋值id的时候就让它的值反正赋值
    • 比如如果是6个学生的话,id为1的我弄成5,4->2,3->3,2->4,1->5,这样就统一了大家的次序,观察可得他们之间的和是相等的,
    • 所以只需要在最后输出的时候改为student+1-特殊改变的id,就可以还原回去,然后打印输出就行了

    参考代码:

    #奖学金
    from operator import itemgetter
    student=int(input())
    student_list=[]
    for n in range(student):
        dist={}
        list_score=list(map(int,input().split()))
        dist['all']=sum(list_score)
        dist['cn']=list_score[0]
        dist['id']=student-n
        student_list.append(dist)
    d=sorted(student_list,key=itemgetter('all','cn','id'),reverse=True)
    for i in range(min(5,student)):
        print("{} {}".format((student+1)-d[i]['id'],d[i]['all']))
        
    

    变量解释:

    1. student:输入学生的个数
    2. student_list:一个嵌套字典的列表,输入实例一后:[{'all': 237, 'cn': 90, 'id': 6}, {'all': 244, 'cn': 87, 'id': 5}, {'all': 258, 'cn': 78, 'id': 4}, {'all': 264, 'cn': 88, 'id': 3}, {'all': 220, 'cn': 67, 'id': 2}, {'all': 265, 'cn': 78, 'id': 1}]
    3. dist:不断去填充值
    4. d用来获取sorted的返回列表,sorted不会改变原来的列表的,而是返回一个排完序之后的新列表这个需要注意.

    总结:
            掌握一个使用itemgetter对于嵌套字典列表的多关键字排序吧,还是有一些收获的.

    更多相关内容
  • Java 多关键字排序

    2021-03-09 15:07:07
    一开始默认可以在类内部重写排序规则: 首先继承排序接口:Comparable<Person> int compare(Person p1, Person p2) 返回一个基本类型的整型, 返回负数表示:p1 小于 p2, 返回0 表示: p1 和 p2相等, ...

    继承 Comparable接口

    一开始默认可以在类内部重写排序规则:

    首先继承排序接口:Comparable<Person>

    int compare(Person p1, Person p2) 返回一个基本类型的整型,
    
    返回负数表示:p1 小于 p2,
    
    返回0 表示: p1 和 p2相等,
    
    返回正数表示:p1 大于 p2
    
    所以重写排序规则的时候很灵活。如果类型是数字的话,可以直接用前一个减后一个, 
    其他类型用 compareTo 函数。
    
    如果从大到小排就 return 的时候把 p1 and p2 调换一下。
    package com.ytc.alpha;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Person implements Comparable<Person>{
        private String name;
        private Integer age;
    
        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public int compareTo(Person o) {
            return this.age - o.age;
        }
    
        public static void main(String[] args) {
            List<Person> plist = new ArrayList<Person>();
            Person p1 = new Person("0001", 14);
            Person p4 = new Person("0004",23);
            Person p5 = new Person("0005",25);
            Person p3 = new Person("0003",25);
            Person p6 = new Person("0006",25);
            Person p7 = new Person("0007",25);
            Person p2 = new Person("0002",20);
    
            plist.add(p1);
            plist.add(p2);
            plist.add(p3);
            plist.add(p4);
            plist.add(p5);
            plist.add(p6);
            plist.add(p7);
            for(Person person : plist){
                System.out.println("排序前的结果:"+person.getName() + " " + person.getAge());
            }
            Collections.sort((plist));
    
            System.out.println();
            for(Person person : plist){
                System.out.println("排序前的结果:"+person.getName() + " " + person.getAge());
            }
        }
    }

     

    比较器的使用

    默认是用 age 排序,但是有的时候需要用 name 来排序怎么办? 这个时候比较器 :Comparator 就排上用场了。

    Comparator 的使用有两种方式:

    • Collections.sort(list,Comparator<T>);

    • list.sort(Comparator<T>);

    其实主要是看 `Comparator` 接口的实现,重写里面的 `compare` 方法。代码如下:

    // 方法一
    Collections.sort(plist, new Comparator<Person>(){
      @Override
      public int compare(Person p1, Person p2) {
        //按照Person的年龄进行升序排列,如果年龄一样按照姓名从大到小排序
        if (p1.getAge() == p2.getAge())
          return p2.getName().compareTo(p1.getName());
        return p1.getAge().compareTo(p2.getAge());
      }
    });
    
    // 方法二
    plist.sort(new Comparator<Person>() {
      // 倒序排列
      @Override
      public int compare(Person o1, Person o2) {
        return o2.age.compareTo(o1.age);
      }
    });
    // 方法三:
    // 定义一个比较器的类,然后直接用就可以了, 可以不用在主程序中写比较的内容
    // 这个类要继承比较器的接口,然后重写比较的规则
    class idComparator implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o2.getAge() - o1.getAge();
        }
    }

     

     

     

    展开全文
  • 现在要求按照一下方式排序(默认排序规则都是从小到大);1.按照编号从小到大排序2.对于编号相等的长方形,按照长方形的长排序;3.如果编号和长都相同,按照长方形的宽排序;4.如果编号、长、宽都相同,就只保留一个

    一种排序

    时间限制:3000 ms | 内存限制:65535 KB
    难度:3

    描述

    现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);

    1.按照编号从小到大排序

    2.对于编号相等的长方形,按照长方形的长排序;

    3.如果编号和长都相同,按照长方形的宽排序;

    4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;

    输入

    第一行有一个整数 0

    输出

    顺序输出每组数据的所有符合条件的长方形的 编号 长 宽

    样例输入

    1
    8
    1 1 1
    1 1 1
    1 1 2
    1 2 1
    1 2 2
    2 1 1
    2 1 2
    2 2 1

    样例输出

    1 1 1
    1 2 1
    1 2 2
    2 1 1
    2 2 1

    来源

    经典题目

    上传者

      iphxer

    题解

      sort函数自定义cmp,实现多关键字排序

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 const int M=1000;
     9 struct node{
    10     int h,w,i;
    11 }rectan[M];
    12 
    13 bool cmp(struct node x,struct node y)
    14 {
    15     if(x.i!=y.i)
    16         return x.i<y.i;
    17     else
    18     {
    19         if(x.h!=y.h)
    20             return x.h<y.h;
    21         else
    22             return x.w<x.w;
    23     }
    24 }
    25 
    26 int main()
    27 {
    28     int n,m;
    29     scanf("%d",&n);
    30     while(n--)
    31     {
    32         scanf("%d",&m);
    33         for(int j=0;j<m;j++)
    34         {
    35             int a,b,c;
    36             scanf("%d %d %d",&a,&b,&c);
    37             rectan[j].i=a;
    38             if(b>c)
    39                 rectan[j].h=b,rectan[j].w=c;
    40             else
    41                 rectan[j].h=c,rectan[j].w=b;
    42 
    43         }
    44         sort(rectan,rectan+m,cmp);46         printf("%d %d %d\n",rectan[0].i,rectan[0].h,rectan[0].w);
    47         for(int j=1;j<m;j++)
    48         {
    49             if(!(rectan[j].i==rectan[j-1].i&&rectan[j].h==rectan[j-1].h&&rectan[j].w==rectan[j-1].w))
    50                 printf("%d %d %d\n",rectan[j].i,rectan[j].h,rectan[j].w);
    51         }
    52 
    53     }
    54     return 0;
    55 }
    展开全文
  • 在python中,sort是列表排序的一种方法,调用方式为list.sort(),这样会改变原来列表...下面主要写一下如何用sort根据关键字排序: 对于一个列表,其中的元素也是列表,要根据元素中的值进行排序,直接看代码: 例子

    在python中,sort是列表排序的一种方法,调用方式为list.sort(),这样会改变原来列表的值。
    sort(key, reverse)方法有key和reverse两种参数,其中key表示的是排序的关键字,reverse表示的是排序的方式(reverse=False表示升序和reverse=True表示降序)
    sort()方法默认是升序排序,即默认reverse=False。
    下面主要写一下如何用sort根据关键字排序:
    对于一个列表,其中的元素也是列表,要根据元素中的值进行排序,直接看代码:
    例子一:

    l = [[1,2,3],[2,2,1],[2,1,3]]
    
    l.sort(key = lambda x: (x[0],-x[1]))
    '''
    其中key表示按第几个关键字排序,lambda x:后()中的元素表示了关键字的优先级
    第一位表示最高的优先级,第二位次之。。。
    其中下x[0]表示按第一个关键词的升序排列,-x[1]表示按第二个关键词的降序排列。
    '''
    print(l)
    #输出:[[1, 2, 3], [2, 2, 1], [2, 1, 3]]
    

    例子二:

    l = [[1,2,2],[2,2,1],[2,1,3]]
    
    l.sort(key = lambda x: (-x[2],x[1]))
    #表示按第三个元素的降序排列,然后再根据第二个元素的升序排
    print(l)
    #输出:[[2, 1, 3], [1, 2, 2], [2, 2, 1]]
    
    展开全文
  • 现有列表ll=[(1,2),(4,5),(8,9),(1,1),(4,3),(8,20)],要实现排序,排序规则为:按元组第一个元素降序,如果元祖第一个元素相同按元祖第二个元祖升序。 import functools def tcmp(x,y): #只能返回[-1,0,1]分别...
  • java常见的排序

    2022-02-15 16:18:35
    排序之内部排序和外部排序,各类排序算法详解。
  • mysql 创建数据库时指定编码很重要,很开发者都使用了默认编码,创建数据库的编码可以很大程度上避免倒入导出带来的乱码问题。遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来很mysql数据库工具...
  • 在书写程序的过程中,常常需要对map的key或者value进行排序,Java本身没有提供对map排序的方法,下面的代码展示如何手动对map进行排序1、按Key排序jdk内置的java.util包的TreeMap可以实现对Key的排序,通过构造方法...
  • 什么是 MySQL 的排序规则(Collation)?马富天2020-01-19 14:56:5815【摘要】当我们在使用 navicate for mysql 等第三方客户端管理界面新建一个数据库时,会让我们填入数据库名,并选择字符集和对应的排序规则(可选项...
  • MySql Order By 个字段 排序规则

    万次阅读 多人点赞 2016-08-21 21:15:32
    突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不说,直接进入正题吧。 MySql order by 单字段 建一测试表如下: CREATE TABLE `a` ( `code` varchar(255) DEFAULT NULL, `name` ...
  • MySQL order by关键字详解,order by排序

    万次阅读 2021-10-31 12:13:45
    ORDER BY 关键字一、order by 简介1)order by 的作用2)语法格式二、order by 使用1)按照字段名排序2)按照索引进行排序3)降序4)按照排序 一、order by 简介 ORDER BY 关键字用于对结果集进行「排序」。 1)...
  • 在我们日常开发过程中有时遇到需要对标题内容进行关键字检索匹配排序,一般我们常用"like"直接做了模糊查询,但是这种模糊查询没有做到关键词匹配度查询。下面我整理两种我在开发中用到两种取巧的做法:做法一:利用...
  • 变量命名规则关键字的介绍

    千次阅读 2018-07-18 20:38:30
    变量命名规则关键字的介绍 标识(志)符:标识变量、数组、函数等的有效字符序列。 标识符的命名规则 名字中只能包含 字母、数字、下划线、$、(中文) 不能以数字开头 不能是保留字或...
  • 深入分析mysql各个关键字的执行顺序
  • Linux sort 排序使用详解

    千次阅读 2021-05-10 16:23:39
    前阵子,写脚本时,用到sort来对文件排序;第一次没有达到所需的效果,原来是LANG设置问题,后来先export LANG=C,然后再sort就满足我的要求了。某牛人总结的sort用法:...
  • Python3 自定义 sort() 的排序规则

    千次阅读 2020-07-13 21:08:55
    在 Python2 中,sort 和 sorted 可以通过关键字参数 cmp 指定排序规则,但在 Python3 中这个参数给去掉了: Python2: list.sort(cmp=None, key=None, reverse=False) Python3: list.sort(key=None, reverse=...
  • Excel 数据分析与处理 CONTENTS 目录 6.1 简单排序 6.2 以当前选中的区域排序 6.3 多关键字排序 6.4 自定义排序 6.5 特殊排序 6.5 特殊排序 选中数据区域中的任意一个黄色背景的单元格如B2单击鼠标右键在弹出的快捷...
  • = null){ //由于split方法有一个特性,就是会忽略待分割对象结尾的一个或个分割符,所以如果分割符(关键词)位于一行结尾,就无法进行统计 //在此处我们给每行文本结尾添加一个自定义结束符"`"(注意,结束符不能...
  • SQL Server中的Collate排序规则关键字的使用
  • mysql数据库,排序的语句

    千次阅读 2021-03-16 04:16:27
    默认情况下数据按升序排列,因此您可以使用ASC关键字指向升序排列或不指定,默认为升序,显示效果为答案,如下所示: 2,降序: 当需要按降序对查询结果进行排序时,必须在排序后指定DESC关键字。下图显示了员工薪水的...
  • Solr打分排序规则自定义

    万次阅读 2017-05-18 17:01:46
    Solr打分排序规则自定义 在搭建好solrCloud搜索集群后,通过编写基本的查询显示语句已经能够通过输入关键字查询到相应结果进行显示,但是在显示结果排序上以及不相关信息过滤问题上,如何制定合理的打分规则得到理想...
  • 对于像set、multiset之类有序容器,默认情况下,标准库使用关键字类型(key)的<运算符来比较两个关键词。 set<int> set ; set.insert(7); set.insert(3); set.insert(10); for (auto it = set....
  • 一.SELECT语句 SELECT COL1,COL2,...... 对列进行排序排序依据,排序方式,优先级) 例:查询分数表中的所有信息,并按照游戏编号的升序和分数的降序进行排序 select * from scores order by gno asc, score desc
  • 数据结构之排序

    2022-02-23 11:24:33
    排序的种类: 1、插入排序(直接插入排序、希尔排序) 2、直接选择排序 3、交换排序(起泡排序、快速排序) 4、归并排序 5、内部排序 1、基本概念 定义: 将文件中的数据记录按关键字值的递增或递减的顺序...
  • 彻底理解volatile关键字

    万次阅读 多人点赞 2018-09-27 20:46:44
    彻底理解volatile关键字 volatile关键字是由JVM提供的最轻量级同步机制。与被滥用的synchronized不同,我们并不习惯使用它。想要正确且完全的理解它并不容易。 Java内存模型 使用volatile关键字的特性 被...
  • Elasticsearch(039):es中搜索之排序

    千次阅读 2021-02-22 21:28:55
    默认情况下,结果集会按照相关性进行排序 – 相关性越高,排名越靠前。为了使结果可以按照相关性进行排序,我们需要一个相关性的值。在ElasticSearch的查询结果中, 相关性分值会用_score字段来给出一个浮点型的数值...
  • volatile关键字使用

    2022-05-03 00:04:22
    volatile关键字简单介绍与使用
  • mysql order by 个字段排序

    万次阅读 多人点赞 2020-08-27 12:07:22
    工作中需用到order by后两个字段排序,但结果却产生了一个Bug,以此备录。 【1】复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例。 如下语句Sql_1: ...order by个字段时..
  • sqlserver排序规则介绍以及修改

    千次阅读 2016-11-10 11:17:39
    一、排序规则简介: 什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 中, 字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存 储和比较字符所使用的规则。"  在查询分析...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,027
精华内容 53,210
关键字:

多关键字排序规则