2-й по величине номер в списке питонов - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в 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. И это происходит каждый раз, независимо от того, сколько раз высший элемент повторяется поступил. Может кто-нибудь объяснить, пожалуйста, причину этого поведения?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Причина странного поведения, которое вы наблюдаете, заключается в том, что вы удаляете элементы из списка, через который вы проходите, поэтому, перемещая элементы из списка с повторениями, вы заставляете итерацию пропускать определенные элементы, поскольку то, что считалось следующий предмет исчез.

Чтобы исправить код, не переписывая его, вы можете просто сделать копию списка перед его повторением:

for i in list_students.copy():
0 голосов
/ 01 июля 2018

Функция remove удаляет первое совпадающее значение, а не текущее значение, которое вы тестируете в цикле. Таким образом, вы изменяете список одновременно с его просмотром. Вы можете попробовать remove(highest), пока не изменится его значение.

Как это:

 while max(list_students) == highest:
      list_students.remove(highest)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...