根据我的名单:
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)
但这并没有达到预期的效果
在不太修改代码的情况下,可以使用list comprehension实现这一点。你知道吗
在迭代时从这样的列表中删除元素是不好的。相反,您可能希望形成一个标记列表来删除和使用
.remove()
功能。你知道吗问题:Thou Shalt Not Modify A List During Iteration
摘要:当我们删除包含19的第一个元素时,其余的元素“向下滑动”。例如,当我们删除
arr[2]
即['Varun', 19]
时,['Kakunami', 19]
替换了它。然后,循环继续arr[3]
,现在是['Vikas', 21]
。在某种程度上,这使得['Kakunami', 19]
脱离了循环。你知道吗解决方案:要解决这个问题,只需从相反的顺序遍历列表:(必须使用
while
…我想)A repl.it as a demo
您可以递归地执行此操作:
否则,还有许多其他选择:)
如果您可以创建一个新列表,那么这将起作用:
否则,您可能需要在这里查看一些答案:How to remove items from a list while iterating?
相关问题 更多 >
编程相关推荐