了解列表`pop索引超出范围`

问题描述 投票:-1回答:3

我正在尝试排列以升序生成的列表。

在我的while循环中使用remove。但是,如果我使用pop,则会不断出现IndexError:弹出索引超出范围。

[我还试图在执行最后一次迭代时增加values列表的长度;到while len(values) > 1,我仍然遇到相同的错误。

任何人都可以解释为什么在使用pop时为什么会不断出现此错误,而在使用remove时却没有呢?


#import randrange
from random import randrange

#generate a list of values
values = []
for i in range(1, 10):
   values.append(randrange(1, 10))
print(values)

#initiate list for keeping minimum values
new_values = []

#define how least value would be determined
while len(values) > 0 :
   new_values.append(min(values))
   values.pop(min(values))


print(new_values)

python list loops
3个回答
0
投票

pop将index放入列表,而不是列表中存在的值。参见list.pop([i])

另请参阅sorted上的文档。


0
投票

您正在提供直接值以在写入values.pop(min(values))时弹出,相反,您必须提供索引位置。


0
投票

您需要将index传递给pop,而不是要删除的值(list.pop docs)

如果您确实必须使用 list.pop,则可以使用pop来获得最小值的索引,如下所示:

numpy.argmin

但是如果您是正好排序列表,为什么不使用import numpy as np new_values = [] #define how least value would be determined while len(values) > 0 : new_values.append(min(values)) values.pop(np.argmin(values)) 内置函数?

sorted
© www.soinside.com 2019 - 2024. All rights reserved.