我是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
可以清楚地看到,循环甚至没有考虑第三个4和它的相邻元素3。而且,无论重复输入最高的元素多少次,都会发生这种情况。谁能解释一下这种行为背后的原因?
发布于 2018-07-01 06:01:37
函数remove
删除第一个匹配值,而不是您在循环中测试的当前值。因此,您可以在浏览列表的同时修改该列表。您可以尝试调用remove(highest)
,直到它的值发生更改。
如下所示:
while max(list_students) == highest:
list_students.remove(highest)
发布于 2018-07-01 06:20:12
您所观察到的奇怪行为的原因是,您正在从您正在遍历的列表中删除项,因此通过从迭代列表中移动项,可以使迭代跳过某些项,因为被认为是下一项的项消失了。
要在不重写代码的情况下修复代码,只需在遍历列表之前对其进行复制:
for i in list_students.copy():
https://stackoverflow.com/questions/51118834
复制相似问题