如何删除列表中最低的元素?

时间:2019-09-22 04:48:21

标签: python list

给出我的列表:

arr=[['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]

我必须删除数字最少的元素

即元素:

['Varun', 19], ['Kakunami', 19]

我尝试了以下代码:

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]
for i in arr:
    if i[1]==min_marks:
        arr.remove(i)

但这无法提供所需的输出

4 个答案:

答案 0 :(得分:0)

如果您可以创建一个新列表,那么它将起作用:

arr = [['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]
min_number = min(arr, key=lambda x: x[1])[1]
arr = [pair for pair in arr if pair[1] != min_number]

否则,您可能需要在这里查看一些答案:How to remove items from a list while iterating?

答案 1 :(得分:0)

问题:Thou Shalt Not Modify A List During Iteration

摘要:当我们删除第一个包含19的元素时,其余的“向下滑动”。例如,当我们删除arr[2]['Varun', 19]时,['Kakunami', 19]取代了它。然后,循环继续到arr[3],现在为['Vikas', 21]。在某种程度上,这使['Kakunami', 19]脱离了循环。

解决方案:要解决此问题,只需按相反的顺序循环遍历该列表:(我想必须使用while ...

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

A repl.it as a demo

您可以递归执行此操作:

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

否则,还有许多其他选择:)

答案 2 :(得分:0)

无需过多修改代码,就可以使用list comprehension来实现。

index.php

在迭代过程中从这样的列表中删除元素并不是很好。取而代之的是,您可能希望形成一个索引列表以删除并使用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] arr = [ elem for elem in arr if elem[1] != min_marks] 功能。

答案 3 :(得分:0)

这是我想到的一个简单解决方案:

arr=[['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]

lowest = sorted(set([i[1] for i in arr]))[0]

output = [i for i in arr if i[1] != lowest]

它只是检查arr中的最小值,并从最终输出中删除包含最小值的列表