首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >第二大排名在python列表中

第二大排名在python列表中
EN

Stack Overflow用户
提问于 2018-07-01 05:56:53
回答 2查看 60关注 0票数 0

我是python的初学者,我一直在解决这个问题,以找到python列表中的第二大元素。答案是否定的。解决这个问题的方法,但我尝试解决的方法是删除最大值(无论它在列表中出现多少次),然后打印修改后列表的最大值。

代码语言:javascript
复制
n = int(input("Enter the no. of list entries"))
list_students = []
for i in range(0, n):
    the_input = int(input("Enter the list element"))
    list_students.append(the_input)

highest = max(list_students)

for i in list_students:
    print("Considering",i)
    if i==highest:
       print("to be deleted ",i)
       list_students.remove(i)
print("the max value is",max(list_students))

Output-

Enter the list element 4
Enter the list element 4
Enter the list element 4
Enter the list element 3
Enter the list element 1
Considering 4
to be deleted  4
Considering 4
to be deleted  4
Considering 1
the max value is 4

可以清楚地看到,循环甚至没有考虑第三个4和它的相邻元素3。而且,无论重复输入最高的元素多少次,都会发生这种情况。谁能解释一下这种行为背后的原因?

EN

回答 2

Stack Overflow用户

发布于 2018-07-01 06:01:37

函数remove删除第一个匹配值,而不是您在循环中测试的当前值。因此,您可以在浏览列表的同时修改该列表。您可以尝试调用remove(highest),直到它的值发生更改。

如下所示:

代码语言:javascript
复制
 while max(list_students) == highest:
      list_students.remove(highest)
票数 0
EN

Stack Overflow用户

发布于 2018-07-01 06:20:12

您所观察到的奇怪行为的原因是,您正在从您正在遍历的列表中删除项,因此通过从迭代列表中移动项,可以使迭代跳过某些项,因为被认为是下一项的项消失了。

要在不重写代码的情况下修复代码,只需在遍历列表之前对其进行复制:

代码语言:javascript
复制
for i in list_students.copy():
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51118834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档