首先,我編寫了代碼的第一個示例,但它無法正常工作。我更喜歡第一個樣本,但只有第二個樣本正常工作。我不知道爲什麼第一個樣本沒有改變原始數組,但是第二個樣本沒有改變。區別在哪裏?函數中的引用如何工作?
首先樣品:
import heapq
def heap_sort(tab):
heap = []
for i in tab:
heapq.heappush(heap, i)
tab = [heapq.heappop(heap) for _ in xrange(len(heap))]
temp_tab = [4, 3, 5, 1]
heap_sort(temp_tab)
print temp_tab
打印:
[4, 3, 5, 1]
第二樣品:
import heapq
def heap_sort(tab):
heap = []
for i in tab:
heapq.heappush(heap, i)
for i, _ in enumerate(tab):
tab[i] = heapq.heappop(heap)
temp_tab = [4, 3, 5, 1]
heap_sort(temp_tab)
print temp_tab
個打印:
[1, 3, 4, 5]
在第一個例子,如果你已經分配給'標籤[:]'而不是'tab',它會起作用。 – Navith
這段代碼有什麼意義?爲什麼不返回堆而不是將所有內容都推回到選項卡中?實際上,爲什麼不直接對列表進行排序並忘記堆內容呢? –