给出我的列表:
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)
但这无法提供所需的输出
答案 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
您可以递归执行此操作:
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中的最小值,并从最终输出中删除包含最小值的列表