我是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。而且,无论最高元素重复多少次,每次都会发生输入。谁能解释这种现象的原因吗?
答案 0 :(得分:0)
函数remove
删除第一个匹配值,而不是您正在循环中测试的当前值。因此,您在浏览列表的同时要对其进行修改。
您可以尝试调用remove(highest)
,直到其值更改为止。
赞:
while max(list_students) == highest:
list_students.remove(highest)
答案 1 :(得分:0)
您看到的奇怪行为的原因是,您要从要迭代的列表中删除项目,因此,通过从迭代列表中移动项目,可以使迭代跳过某些项目,因为这被认为是下一项消失了。
要在不重写代码的情况下修复代码,只需在遍历列表之前对其进行复制即可:
for i in list_students.copy():