我正在尝试排列以升序生成的列表。
在我的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)
pop将index放入列表,而不是列表中存在的值。参见list.pop([i])。
另请参阅sorted上的文档。
您正在提供直接值以在写入values.pop(min(values))
时弹出,相反,您必须提供索引位置。
您需要将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