Почему список Python не изменяется в приведенном ниже коде - PullRequest
0 голосов
/ 06 августа 2020

Я реализую heapsort, просто используя метод Python heapq.heapify ().

Когда я запускаю приведенный ниже код, список, переданный в heapify (), не изменяется (может быть, я знаю причину), но когда я удаляю эти комментарии и передаю новый список (например, x) в heapify (), он работает отлично, но на каждой итерации будет создаваться дополнительный список.

Есть ли любым другим способом сделать это (используя heapify () и без создания нового списка)?

from heapq import heapify

def heapsort(arr, n):

   for i in range(n):
      # x = arr[i:]
      heapify(arr[i:]) 
      #arr[i:] = x
  
x = [17,15,37,12,38,62]
heapsort(x, len(x)-1) 
print(x)           

Ответы [ 2 ]

1 голос
/ 25 августа 2020

Вместо того, чтобы создавать собственную динамическую сортировку, попробуйте предоставить python: -

>>> from heapq import *
>>> def heapsort(iterable):
...     h = []
...     for value in iterable:
...         heappush(h, value)
...     return [heappop(h) for i in range(len(h))]
...
>>> heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 голосов
/ 06 августа 2020

Вы все равно создаете новый список: срез списка как значение RHS - это новый список. Чтобы показать активность:

print(id(x), x)        # This will show new objects being spawned.
for i in range(n):
   # x = arr[i:]
   heapify(arr[i:])    # This creates a new list to pass into the recursive invocation
   #arr[i:] = x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...