我目前是Python的新手,我正在尝试高效地学习它。我为自己创建的项目需要我获取列表的最小值,然后将其添加到另一个列表中,然后最终删除该最小值并重做该过程,直到原始列表中没有更多的值为止。
例如,如果我有
list = [0, 3, 2, 1, 4, 2, 4, 5, 5]
我要检索具有以下值的列表:
list2 = [0, 1, 2, 2, 3, 4, 4, 5, 5] #(in this specific order)
list = [] # empty because values have been deleted.
这是我已经拥有的代码:
count = 0
counter = len(group0)
while counter > 1:
while count < len(group0):
if min(group0) == group0[count]:
finalgroup0.append(group0[count]) #finalgroup0 is an empty list at the start.
group0.remove(group0[count]) #group0 has all of the values.
count += 1
else:
count += 1
counter -= 1
注意:删除列表中值的唯一原因是可以再次提取整个列表中的最小值。如果没有必要,请给我启发。同样,此代码在一定程度上起作用了,但是并没有遍及整个列表。这就是为什么我在外部添加了while循环,以便一旦它到达一个就可以完成,但是那也不起作用。我相信这是因为它正在检查“ count”的所有值并检查它是否是最小值,这就是为什么计数器值需要更高的原因。但是,如果我增加计数器值,则会出现“列表索引超出范围”错误。
我知道我的代码不是最有效的,但是我一直在这样做,并且尝试使用for循环和其他方法,但是没有一个起作用。如果有人可以帮助我,我将不胜感激。
谢谢。
答案 0 :(得分:2)
list = [0, 3, 2, 1, 4, 2, 4, 5, 5]
list.sort()
list2, list = list, []
答案 1 :(得分:1)
使用sort()方法
list.sort()
print(list)
它将为您节省一个额外的变量(list2)
答案 2 :(得分:0)
有很多方法可以做到,尤其是在使用python时。
如果您的列表很小,通常我们真的不太在乎性能。可以使用内置的min和delete函数,如果您只需要一个正确的结果(如其他人所提到的那样),则可以对其进行排序并复制到另一个列表中。
如果列表很大,则不建议使用上述两种方法,因为缓存不足问题使它们甚至比预期的要慢。您需要一个堆/优先级队列。
c = [3, 2, 1, 4, 2, 4, 5, 5]
h = []
while c:
heapq.heappush(h, c.pop())
result = []
while h:
result.append(heapq.heappop(h))
还有一件事情,永远不要使用list
来命名变量,它会覆盖内置列表函数。
答案 3 :(得分:-1)
您可以使用while
循环从group0
获取最小项并将其附加到finalgroup0
,然后从group0
删除该项,直到group0
变为空:
from operator import itemgetter
group0 = [0, 3, 2, 1, 4, 2, 4, 5, 5]
finalgroup0 = []
while group0:
i, n = min(enumerate(group0), key=itemgetter(1))
finalgroup0.append(n)
del group0[i]
print('finalgroup0:', finalgroup0)
print('group0:', group0)
这将输出:
finalgroup0: [0]
group0: [3, 2, 1, 4, 2, 4, 5, 5]
finalgroup0: [0, 1]
group0: [3, 2, 4, 2, 4, 5, 5]
finalgroup0: [0, 1, 2]
group0: [3, 4, 2, 4, 5, 5]
finalgroup0: [0, 1, 2, 2]
group0: [3, 4, 4, 5, 5]
finalgroup0: [0, 1, 2, 2, 3]
group0: [4, 4, 5, 5]
finalgroup0: [0, 1, 2, 2, 3, 4]
group0: [4, 5, 5]
finalgroup0: [0, 1, 2, 2, 3, 4, 4]
group0: [5, 5]
finalgroup0: [0, 1, 2, 2, 3, 4, 4, 5]
group0: [5]
finalgroup0: [0, 1, 2, 2, 3, 4, 4, 5, 5]
group0: []