簡體   English   中英

Python:如何連續刪除列表的最小值並將其添加到另一個列表?

[英]Python: How to continuously remove the minimum of a list and add it to another list?

我目前是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循環和其他方法,但是沒有一個起作用。 如果有人可以幫助我,我將不勝感激。

提前致謝。

list = [0, 3, 2, 1, 4, 2, 4, 5, 5]
list.sort()
list2, list = list, []

使用sort()方法

list.sort()
print(list)

它將為您節省一個額外的變量(list2)

有很多方法可以做到這一點,當您使用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來命名變量,它會覆蓋內置列表功能。

您可以使用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: []

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM