首先,我编写了第一个代码示例,但它无法正常工作。我更喜欢第一个示例,但只有第二个示例可以正常工作。我不知道为什么第一个样本没有改变原始数组,但第二个样本却改变了。差别在哪里呢?
第一个样本:
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
Prints:
[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
Prints:
[1, 3, 4, 5]
你也可以使用[:]
,这将更改传入的原始对象:
def heap_sort(tab):
heap = []
for i in tab:
heapq.heappush(heap, i)
tab[:] = [heapq.heappop(heap) for _ in xrange(len(heap))]
所以不要重新分配名称tab
对于一个新对象,您实际上是在更新原始对象tab
object.
您还可以使用生成器表达式而不是构建整个列表:
tab[:] = (heapq.heappop(heap) for _ in xrange(len(heap)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)