Проблема: Вы не должны изменять список во время итерации
Резюме: Когда мы удаляем первый элемент, содержащий 19, остальные «скользят вниз».Например, когда мы удалили arr[2]
aka ['Varun', 19]
, ['Kakunami', 19]
заменил его.Затем цикл продолжился до arr[3]
, который теперь равен ['Vikas', 21]
.Это, в некотором смысле, оставило ['Kakunami', 19]
вне цикла.
Решение: Чтобы обойти это, просто зациклите список в обратном порядке: (Приходится использовать while
... Iдумать)
arr=[['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]
arr.sort(key=lambda x: (x[1],x[0]))
min_value=min(arr,key=lambda x:x[1])
min_marks=min_value[1]
i = len(arr) - 1;
while i >= 0:
if arr[i][1]==min_marks:
arr.remove(arr[i])
i = i - 1
print arr
Repl.it в качестве демо
Вы можете сделать это рекурсивно:
arr=[['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]
arr.sort(key=lambda x: (x[1],x[0]))
min_value=min(arr,key=lambda x:x[1])
min_marks=min_value[1]
def removeLowest(arr, min):
for i in arr:
if i[1]==min_marks:
arr.remove(i)
return removeLowest(arr, min)
return arr
removeLowest(arr, min)
print arr
В противном случае, есть многодругие альтернативы:)