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

2024-09-28 23:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

根据我的名单:

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)

但这并没有达到预期的效果


Tags: lambdakey代码元素value数字minarr
3条回答

在不太修改代码的情况下,可以使用list comprehension实现这一点。你知道吗

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] 

在迭代时从这样的列表中删除元素是不好的。相反,您可能希望形成一个标记列表来删除和使用.remove()功能。你知道吗

问题: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

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

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

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?

相关问题 更多 >