<p>问题:<a href="https://unspecified.wordpress.com/2009/02/12/thou-shalt-not-modify-a-list-during-iteration/" rel="nofollow noreferrer">Thou Shalt Not Modify A List During Iteration</a></p>
<p>摘要:当我们删除包含19的第一个元素时,其余的元素“向下滑动”。例如,当我们删除<code>arr[2]</code>即<code>['Varun', 19]</code>时,<code>['Kakunami', 19]</code>替换了它。然后,循环继续<code>arr[3]</code>,现在是<code>['Vikas', 21]</code>。在某种程度上,这使得<code>['Kakunami', 19]</code>脱离了循环。你知道吗</p>
<p>解决方案:要解决这个问题,只需从相反的顺序遍历列表:(必须使用<code>while</code>…我想)</p>
<pre><code>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
</code></pre>
<p><a href="https://repl.it/@chrishappy/FrozenNativeMisrac" rel="nofollow noreferrer">A repl.it as a demo</a></p>
<p>您可以递归地执行此操作:</p>
<pre><code>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
</code></pre>
<p>否则,还有许多其他选择:)</p>