Python Next()跳过列表中的实际项和下一项,而它应该只跳过实际项

Python Next()跳过列表中的实际项和下一项,而它应该只跳过实际项,python,python-3.x,list,loops,iterator,Python,Python 3.x,List,Loops,Iterator,我正在写一个程序,给出一个整数列表,确定最小值,然后用列表的小索引删除最小值 例如:list=[3,6,15,2,4,2]应该返回[3,6,15,4,2] 请注意,由于列表上的次要索引,前2个被删除 这是我的全部代码: def移除_最小数量: mylist=[] 如果不是数字: 返回mylist 最小值=最小数 如果numbers.countminimo>1: numbers=numbers[:-1]我对次要索引的解决方案是反转列表和循环。然后再倒过来。 mylist=[item for ite

我正在写一个程序,给出一个整数列表,确定最小值,然后用列表的小索引删除最小值

例如:list=[3,6,15,2,4,2]应该返回[3,6,15,4,2] 请注意,由于列表上的次要索引,前2个被删除

这是我的全部代码:

def移除_最小数量: mylist=[] 如果不是数字: 返回mylist 最小值=最小数 如果numbers.countminimo>1: numbers=numbers[:-1]我对次要索引的解决方案是反转列表和循环。然后再倒过来。 mylist=[item for item in numbers if item!=minimo and item not in mylist]我试图使用列表理解,结果很糟糕。 it=IterNumber 对于其中的项目: 如果item==最小值且mylist中的item: 下一个,没有 持续 mylist.appenditem printmylist[:-1] 移除_最小的[2,4,5,1,2,1] 前两项将附加到mylist 1、2。 然后,因为1在mylist上,它将跳过它,然后继续。但是,到目前为止还不错,当它应该选择5时,它没有选择,而是直接进入4,然后进入2,从而在程序结束时生成如下数组:[2,4,2,1],当它应该返回[2,4,5,2,1]


谢谢

删除下一条语句会使代码以预期的方式工作。for循环已经在迭代器上调用next,因此无需手动执行

def移除_最小数量: mylist=[] 如果不是数字: 返回mylist 最小值=最小数 如果numbers.countminimo>1: numbers=numbers[:-1]我对次要索引的解决方案是反转列表和循环。然后再倒过来。 it=IterNumber 对于其中的项目: 如果item==最小值且mylist中的item: 持续 mylist.appenditem printmylist[:-1] 移除_最小的[2,4,5,1,2,1] 结果:

[2, 4, 5, 2, 1]
删除下一条语句会使代码按预期方式工作。for循环已经在迭代器上调用next,因此无需手动执行

def移除_最小数量: mylist=[] 如果不是数字: 返回mylist 最小值=最小数 如果numbers.countminimo>1: numbers=numbers[:-1]我对次要索引的解决方案是反转列表和循环。然后再倒过来。 it=IterNumber 对于其中的项目: 如果item==最小值且mylist中的item: 持续 mylist.appenditem printmylist[:-1] 移除_最小的[2,4,5,1,2,1] 结果:

[2, 4, 5, 2, 1]
我将设计一种新方法,因为我发现您的代码太多:

def remove_smallest(lst):
    mini = min(lst)
    indx = next((i for i, x in enumerate(lst) if x == mini), -1)
    del lst[indx]
    return lst
它可以安全地删除列表中第一个出现的最小元素

用法:


我将设计一种新方法,因为我发现您的代码太多:

def remove_smallest(lst):
    mini = min(lst)
    indx = next((i for i, x in enumerate(lst) if x == mini), -1)
    del lst[indx]
    return lst
它可以安全地删除列表中第一个出现的最小元素

用法:


一个简单的语句将删除最小的值。l、 indexminl查找最小值的索引

>>> l = [2,4,5,1,2,1]
>>> del l[l.index(min(l))]
>>> l
[2, 4, 5, 2, 1]

一个简单的语句将删除最小的值。l、 indexminl查找最小值的索引

>>> l = [2,4,5,1,2,1]
>>> del l[l.index(min(l))]
>>> l
[2, 4, 5, 2, 1]

此函数将删除列表中第一个出现的最小数字并返回该数字,该列表已修改到位,因此无需返回:

def pop_smallest(lst):
    smallest = lst.index(min(lst))
    return lst.pop(smallest)

l = [2, 4, 5, 1, 2, 1]
pop_smallest(l)
>>> 1

l
>>> [2, 4, 5, 2, 1]
但是如果不想修改原始列表,则需要复制列表并返回新列表

def pop_smallest(lst):
    new_lst = lst.copy()
    smallest = new_lst.index(min(lst))
    new_lst.pop(smallest)
    return new_lst

l = [2, 4, 5, 1, 2, 1]
new_l = pop_smallest(l)

l
>>> [2, 4, 5, 1, 2, 1]
new_l
>>> [2, 4, 5, 2, 1]

此函数将删除列表中第一个出现的最小数字并返回该数字,该列表已修改到位,因此无需返回:

def pop_smallest(lst):
    smallest = lst.index(min(lst))
    return lst.pop(smallest)

l = [2, 4, 5, 1, 2, 1]
pop_smallest(l)
>>> 1

l
>>> [2, 4, 5, 2, 1]
但是如果不想修改原始列表,则需要复制列表并返回新列表

def pop_smallest(lst):
    new_lst = lst.copy()
    smallest = new_lst.index(min(lst))
    new_lst.pop(smallest)
    return new_lst

l = [2, 4, 5, 1, 2, 1]
new_l = pop_smallest(l)

l
>>> [2, 4, 5, 1, 2, 1]
new_l
>>> [2, 4, 5, 2, 1]

删除nextit,None,它将给出正确的结果。为了澄清原因,对于其中的项:直接推进迭代器,您不需要使用next手动执行。不相关的建议:numbers.removeminnumbers是解决此用例的一行程序for循环本身隐式调用next。你不需要自己做。谢谢,它也成功了!删除nextit,None,它将给出正确的结果。为了澄清原因,对于其中的项:直接推进迭代器,您不需要使用next手动执行。不相关的建议:numbers.removeminnumbers是解决此用例的一行程序for循环本身隐式调用next。你不需要自己做。谢谢,它也成功了!好的,但这将计算minlst N次,其中N是列表长度。为什么不干脆indx=lst.indexminlst?@zvone,哎呀!我的错。忽略了这一点。更正了minlst的计算,这可能有助于了解下一步的工作原理。好的,但这将计算minlst N次,其中N是列表长度。为什么不干脆indx=lst.indexminlst?@zvone,哎呀!我的错。忽略了这一点。修正了minlst和proba的计算
布莱:这将有助于人们理解下一步的工作原理。只是建议在python中使用if not numbers是一种糟糕的做法-@mishsx,因为一切都假设数字是一个列表,那么如果不是数字作为if是空的检查似乎很好…只是一个建议,在python中使用if不是数字是一个糟糕的做法-@mishsx,因为一切都假设数字是一个列表,那么如果不是数字作为if是空的检查似乎很好…你不仅解决了我的问题,但是练习的全部目的。你不仅解决了我的问题,而且还解决了练习的全部目的。