首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查找嵌套列表程序的第二大数目

查找嵌套列表程序的第二大数目
EN

Stack Overflow用户
提问于 2020-03-14 03:43:28
回答 3查看 1.2K关注 0票数 1

给定N学生物理课堂中每个学生的姓名和成绩,将其存储在嵌套列表中,并打印任何二年级学生的姓名。

备注:如果有多个同年级的学生,按字母顺序排列他们的名字,然后在新的一行上打印每个名字。

输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

以下是我对上述问题的建议:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
marks = sorted([student[i][1] for i in range(len(student))], reverse = True)

for num in range(1,len(marks)):
    if marks[num] < marks[0]:
        if marks[num+1] < marks[num]:
            temp = marks[num+1]
            break
    else:
        continue
second_top = [student[i] for i in range(len(student)) if student[i][1] == temp]

topper = sorted([k for k,l in second_top])

for i in range(len(topper)):
    print(topper[i])

Ouptut

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Berry
Harry

有没有办法改进这段代码。我是Python的新手,开始在黑客等级上练习

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-14 07:27:37

首先,我要对y上升的等级进行排序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
>>> grades = sorted(set(g for _, g in students))
>>> grades
[37.2, 37.21, 39, 41]

set(g for _, g in students)提取等级并删除重复项(set)。

然后取列表中的第二个元素,这是第二个最低的级别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> second_lowest_grade = grades[1]
>>> second_lowest_grade
37.21

然后循环顺序名称(按字母顺序计算)给二低年级学生:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for name in sorted(n for n, g in students if g == second_lowest_grade):
...     print(name)
... 
Berry
Harry
票数 1
EN

Stack Overflow用户

发布于 2020-03-14 03:52:30

试试这个,这也解释了以前的aequos:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

ranked = sorted(students, key=lambda a: (a[1], a[0]))

second_best = ranked[1][1]  # or whichever rank you want

print(ranked)

ex_aequos = [s for s in ranked if s[1] == second_best]

print(ex_aequos)  

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[['Akriti', 41], ['Harsh', 39], ['Berry', 37.21], ['Harry',
 37.21], ['Tina', 37.2]]
[['Berry', 37.21], ['Harry', 37.21]]
票数 3
EN

Stack Overflow用户

发布于 2020-03-14 06:47:25

您可以使用itertools.groupbyitertools.islice来理解列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from itertools import groupby, islice

s = [i[0]  for e in islice((list(g) for k, g in groupby(sorted(students), key=lambda x: x[1])), 1, 2) for i in e]

print(*s, sep='\n')

产出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Berry
Harry

另一种方法是将数据存储在一个字典中,其中键是年级,值将是一个列表,其中包含所有具有该键指定的年级的学生:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import defaultdict

grade_student = defaultdict(list)
for student, grade in students:
    grade_student[grade].append(student)

# second lowest grade   
second_grade = sorted(grade_student.keys())[1]

# order the names alphabetically and print each name on a new line
print(*sorted(grade_student[second_grade]), sep='\n')

产出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Berry
Harry
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60682342

复制
相关文章
TensorFlow2.X学习笔记(4)--TensorFlow低阶API之AutoGraph相关研究
而Autograph机制可以将动态图转换成静态计算图,兼收执行效率和编码效率之利。
MiChong
2020/09/24
1K0
TensorFlow2.X学习笔记(4)--TensorFlow低阶API之AutoGraph相关研究
【Python】面向对象 ② ( 类的定义和使用 | 类的成员方法 | 类成员方法定义语法 | self 关键字 )
类的成员方法 , 就是 在 类 中定义的 函数 , 在该 函数 中 , 可以调用 类的成员变量 , 以及 本类中其它的成员方法 ;
韩曙亮
2023/10/11
4680
【Python】面向对象 ② ( 类的定义和使用 | 类的成员方法 | 类成员方法定义语法 | self 关键字 )
Python 「面向对象基本语法1」(判断对象的方法、定义类、示例)
在学基础语法之前先学习一下python中的一个内置函数dir。在python中对象几乎是无处不在的,之前学习的变量、数据、函数都是对象。
python自学网
2022/06/20
8160
Python 「面向对象基本语法1」(判断对象的方法、定义类、示例)
PHP面向对象-类和对象的定义(三)
在PHP中,类的属性和方法可以设置访问控制,以限制它们的访问权限。常用的访问控制有三种:公有(public)、私有(private)和受保护(protected)。
堕落飞鸟
2023/04/27
5710
PHP面向对象-类和对象的定义(五)
多态是面向对象编程中的另一个重要特性,它可以让不同的对象使用相同的方法,但是表现出不同的行为。在PHP中,多态可以通过接口和抽象类来实现。
堕落飞鸟
2023/04/27
6230
C++面向对象编程类对象的定义
对象和对象之间的关系:分别使用不同的内存来存储数据,使用相同的内存上的函数(一份函数拷贝)
风骨散人Chiam
2020/10/28
1K0
PHP面向对象-类和对象的定义(一)
在PHP面向对象编程中,类和对象是最基础和最重要的概念。类是一种抽象的数据类型,它定义了一组属性和方法,用来描述某种事物的特征和行为;而对象则是类的一个实例,它具有类定义的属性和方法,并可以进行相应的操作。
堕落飞鸟
2023/04/27
5810
PHP面向对象-类和对象的定义(四)
继承是面向对象编程中的另一个重要特性,它可以让一个类继承另一个类的属性和方法,并可以对它们进行扩展和修改。在PHP中,可以使用extends关键字实现类的继承,语法如下:
堕落飞鸟
2023/04/27
4800
PHP面向对象-类和对象的定义(二)
其中,对象名可以任意指定,类名必须与定义的类名一致,参数列表是传递给构造函数的参数,可以为空。创建对象时,PHP会自动调用构造函数,并为对象的属性赋初始值。
堕落飞鸟
2023/04/27
5640
【tensorflow2.0】AutoGraph和tf.Module
而Autograph机制可以将动态图转换成静态计算图,兼收执行效率和编码效率之利。
西西嘛呦
2020/08/26
7460
【tensorflow2.0】AutoGraph和tf.Module
类与对象的绑定方法
类与对象的绑定方法 class OldboyStudent: school = 'oldboy' def __init__(self, name, age, gender): self.name = name self.age = age self.sex = gender def choose_course(self): print(f'{self.name} choosing course') def
py3study
2020/01/15
7730
Python面向对象编程-类和对象-类的定义和使用(一)
类是一种定义了一组属性和方法的模板。属性是对象的数据成员,而方法是对象的函数成员。类是一个抽象的概念,它只描述了对象的行为和状态,并不具体实现。
玖叁叁
2023/04/18
6130
Python面向对象编程-类和对象-类的定义和使用(三)
我们可以使用点号 . 来访问对象的属性。例如,如果我们有一个名为 name 的属性,我们可以使用 p1.name 来访问它。
玖叁叁
2023/04/18
6870
Python面向对象编程-类和对象-类的定义和使用(二)
在类中定义方法时,第一个参数必须是 self。self 表示对象本身。当调用方法时,Python 自动将对象作为方法的第一个参数传递。我们可以使用 self 来访问和操作对象的属性。
玖叁叁
2023/04/18
5660
创建自定义类的对象数组
CN_Simo
2017/12/26
2.3K0
创建自定义类的对象数组
小谈startup类ConfigureServices方法的作用
这个是我在面试中遇到的一道面试题,记录下来分享给大家。 简单说ConfigureServices是配置服务器的DI容器,可以添加一些服务进到依赖注入容器中。具体来说就是把中间件等添加到DI容器中,最后都是添加到IServiceCollection中,比如下面的代码:
喵叔
2021/11/29
8440
Tensorflow2.0常用基础API
tensorflow2.0改进之后已经非常像numpy形式了,不用像之前的session那样操作,一些基本的操作如下。需要注意的店以及部分数据均写在代码注释中。
Mirza Zhao
2023/06/26
7880
类和对象的初步接触与定义
        在C++优化和解决完C的指针和大工程容易导致的函数和变量命名冲突后,C++对于C的又有一个重大的优化和改进——struct结构体。在C++中因为要兼容C所以C++用了一个新名字——class类。
比特大冒险
2023/04/16
4200
类和对象的初步接触与定义
PHP方法类与对象的区别
不知道有人是否和作者一样,不是特别的能区分方法类和对象的区别呢。那么今天就用一个简单例子解释类和对象的区别。
小唐同学.
2022/03/07
1.6K0
点击加载更多

相似问题

在PRD报告中创建动态链接

11

具有三列的交叉表

10

具有动态列数的报告

12

Postgres交叉表动态列数

12

jasper报告:交叉表上的自定义列

130
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文