Как найти максимальное значение в хеш-таблице, которая реализована вручную? - PullRequest
0 голосов
/ 22 мая 2018

Привет, я новичок в Python, и я реализовал хеш-таблицу, которая подсчитывает количество вхождений буквы в слове.

Например, хеш-таблица в настоящее время хранит это:

{l:1, r:1, t:1, u:1, a:1, c:1, d:2, e:1, }

Я хочу найти максимальное значение в хеш-таблице, которое равно 2. Я реализовал итератор, чтобы я мог перебирать хеш-таблицу.Мне удалось найти максимальное значение следующим образом:

РЕДАКТИРОВАТЬ: я реализовал класс хеш-таблицы с помощью элемента set, получить функции элемента.

class HashTableQuadratic:

def __init__(self, size=10):
    self.count = 0
    self.table_size = size
    self.array = build_array(self.table_size)
    self.collision=0
    self.totalProbeLength=0

 //some code here


tempList=[]
for item in hashTable:
if item!=None:
    tempList.append(item[1])
maxNum=max(tempList)
print(maxNum)

Но есть ли лучший способ сделать этобез использования tempList и встроенной функции max?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Ваш hashTable объект выглядит как итерация пар ключ-значение.

Во-первых, не то, что ваши четыре строки кода:

tempList=[]
for item in hashTable:
if item!=None:
    tempList.append(item[1])

... эквивалентны единицеПонимание:1013 * call:

maxNum = max(item[1] for item in hashTable if item is not None)

В качестве примечания, обратите внимание, что я использовал item is not None вместо item != None.Вы почти никогда хотите сравнить с None с == или !=.Эмпирическое правило:

  • Если вы хотите получить любое истинное значение, используйте if item.
  • Если вы хотите любое значение, отличное от None, используйте if item is not None.
  • Если вам нужно любое значение, отличное от None, в то же время, позволяя другим классам переопределять __eq__ и сравнивать как равное None, используйте if item != None.

Тем не менее, стоит отметить, что если вы хотите создать собственную хэш-таблицу, вы, вероятно, захотите, чтобы она действовала как диктовка или, по крайней мере, как Mapping.Реализация интерфейса Mapping очень проста, и это означает, что ваш объект может быть утилитарным, как dict.

И, если вы сделаете это, вы можете использовать тот же код, который вы использовали бы с dict:

maxNum = max(hashTable.values())
0 голосов
/ 22 мая 2018

Если ваш класс такой же, как collections.Counter, вы можете просто использовать max следующим образом:

max(hashTable.items(), key=lambda item: item[1])

Это вернет ('d', 2) с вашим примером.Вы можете упростить его, если вам не интересно знать, какой ключ имеет максимальное значение.

Мы передаем все элементы как (key, value) пары и используем аргумент key max, чтобы сказать ему сравнивать элементы по значению.

...