минимальная "куча" в Python

На мой взгляд, переменная - это единое целое. Может быть, эта сущность является совокупностью других сущностей, таких как массив или коллекция, и в этом случае имеет смысл дать ей имя во множественном числе, например, набор из Shape объектов можно назвать shapes. Несмотря на это, это все еще один объект. Глядя на это таким образом, грамматически приемлемо называть его единственным. В конце концов, is_shapes_initialized на самом деле означает «инициализируется ли переменная« формы »?»

По той же причине мы говорим « Багамские острова » или « Нидерланды - [ 115] ", потому что мы имеем в виду единственную страну, а не какую-либо множественную единицу, из которой она состоит. Так что да, is_shapes_initialized можно считать грамматически правильным.

11
задан Cristian Ciupitu 31 August 2015 в 02:47
поделиться

2 ответа

Да, существует путь. Определите переносящийся класс, который реализует Ваш пользовательский компаратор, и используйте список тех, которые вместо списка Ваших фактических объектов. Это о лучшем существует то, все еще с помощью heapq модуля, так как он не обеспечивает ключа = или cmp =, аргументы как функции/методы сортировки делают.

def gen_wrapper(cmp):
    class Wrapper(object):
        def __init__(self, value): self.value = value
        def __cmp__(self, obj): return cmp(self.value, obj.value)
    return Wrapper
14
ответ дан 3 December 2019 в 03:05
поделиться

Две опции (кроме предложения Devin Jeanpierre):

  1. Украсьте свои данные перед использованием "кучи". Это - эквивалент key= опция к сортировке. например, если Вы (по некоторым причинам) хотели к heapify список чисел согласно их синусу:

    data = [ # list of numbers ]
    heap = [(math.sin(x), x) for x in data]
    heapq.heapify(heap)
    # get the min element
    item = heappop(heap)[1]
    
  2. heapq модуль реализован в чистом Python. Вы могли просто скопировать его в свой рабочий каталог и изменить соответствующие биты. От беглого взгляда необходимо было бы изменить siftdown () и siftup (), и возможно nlargest и nsmallest при необходимости в них.

15
ответ дан 3 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: