python-3.x - 第二大号 在 python 列表中
问题描述
我是 python 的初学者,我一直在解决这个问题以找到 python 列表的第二大元素。有一个没有。解决这个问题的方法,但我试图解决它的方法是删除最大值(无论它在列表中出现多少次),然后打印修改后的列表的最大值。
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
虽然预计是3。可以清楚地看到,循环甚至没有考虑第三个4及其相邻元素3。无论重复输入多少次最高元素,它每次都会发生。谁能解释一下这种行为背后的原因?
解决方案
您观察到的奇怪行为的原因是您正在从正在迭代的列表中删除项目,因此通过从迭代列表中移动项目,您可以使迭代跳过某些项目,因为认为下一个项目消失了.
要在不重写代码的情况下修复代码,您可以在迭代之前简单地复制列表:
for i in list_students.copy():
推荐阅读
- javascript - es6 类中需要构造方法吗
- mysql - MYSQL 用列值更新列
- firebase-realtime-database - 如何从 firebase 数据库中获取特定值?
- mysql - MySQL CASE - 如何处理单个 CASE 语句的多个结果
- python - Python ValueError 和 IndexError
- javascript - 关闭 chrome.runtime.openOptionsPage 的等效命令是什么?
- javascript - dispatchEvent 上的 Chrome 内存泄漏
- sql - 不能在 argMinMerge/argMaxMerge 中使用 Date/DateTime 作为 arg?
- python - Django F() 表达式在函数参数中不起作用
- python - 创建类实例的 Python 函数