На мой взгляд, переменная - это единое целое. Может быть, эта сущность является совокупностью других сущностей, таких как массив или коллекция, и в этом случае имеет смысл дать ей имя во множественном числе, например, набор из Shape
объектов можно назвать shapes
. Несмотря на это, это все еще один объект. Глядя на это таким образом, грамматически приемлемо называть его единственным. В конце концов, is_shapes_initialized
на самом деле означает «инициализируется ли переменная« формы »?»
По той же причине мы говорим « Багамские острова » или « Нидерланды - [ 115] ", потому что мы имеем в виду единственную страну, а не какую-либо множественную единицу, из которой она состоит. Так что да, is_shapes_initialized
можно считать грамматически правильным.
Да, существует путь. Определите переносящийся класс, который реализует Ваш пользовательский компаратор, и используйте список тех, которые вместо списка Ваших фактических объектов. Это о лучшем существует то, все еще с помощью 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
Две опции (кроме предложения Devin Jeanpierre):
Украсьте свои данные перед использованием "кучи". Это - эквивалент 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]
heapq
модуль реализован в чистом Python. Вы могли просто скопировать его в свой рабочий каталог и изменить соответствующие биты. От беглого взгляда необходимо было бы изменить siftdown () и siftup (), и возможно nlargest и nsmallest при необходимости в них.