Python:如何持续从列表中删除最小值并添加到另一个列表中?

2024-04-19 21:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前是Python的新手,我正在努力有效地学习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循环,这样一旦它达到一个while循环就可以完成了,但是这也不起作用。我相信这是因为它正在检查所有值的'count'和检查它是否是一个min,这就是为什么计数器值需要更高。但是,如果增加计数器值,则会出现“列表索引,超出范围”错误。你知道吗

我知道我的代码不是最有效的,但我一直在做这件事,我尝试过使用for循环和其他方法,但都没有成功。如果有人能帮我,我将不胜感激。你知道吗

提前谢谢。你知道吗


Tags: the代码列表lencountcounter计数器min
3条回答
list = [0, 3, 2, 1, 4, 2, 4, 5, 5]
list.sort()
list2, list = list, []

有很多方法可以做到这一点,尤其是在使用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来命名变量,它会覆盖内置的list函数。你知道吗

使用sort()方法

list.sort()
print(list)

它将为您节省一个额外的变量(list2)

相关问题 更多 >