首页 > 解决方案 > 第二大号 在 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。无论重复输入多少次最高元素,它每次都会发生。谁能解释一下这种行为背后的原因?

标签: python-3.xlist

解决方案


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

要在不重写代码的情况下修复代码,您可以在迭代之前简单地复制列表:

for i in list_students.copy():

推荐阅读