您好我是Python的新手,我实现了一个哈希表来计算单词中出现的字母数。
例如,哈希表当前存储了这个:
{l:1, r:1, t:1, u:1, a:1, c:1, d:2, e:1, }
我想在哈希表中找到最大值,即2.我实现了一个迭代器,所以我可以遍历哈希表。我设法找到这样的最大值:
编辑:我使用set item,get item functions实现了一个hashtable类。
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内置函数,有没有更好的方法呢?
答案 0 :(得分:0)
假设您的课程与collections.Counter
相同,您可以这样简单地使用max
:
max(hashTable.items(), key=lambda item: item[1])
这将以您的示例返回('d', 2)
。如果您不想知道哪个密钥具有最大值,则可以简化它。
我们将所有项目作为(key, value)
对传递,并使用max
的key
参数告诉它按值比较项目。
答案 1 :(得分:0)
您的hashTable
对象似乎是可重复的键值对。
首先,不是你的四行代码:
tempList=[]
for item in hashTable:
if item!=None:
tempList.append(item[1])
......相当于单线理解:
tempList = [item[1] for item in hashTable if item is not None]
将它变成一个懒惰的迭代器而不是在内存中构建一个列表是微不足道的:
it = (item[1] for item in hashTable if item is not None)
您可以直接在max
电话中内联:
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
。但是,值得注意的是,如果你想构建一个自定义哈希表,你可能希望它像dict一样 - 或至少像Mapping
。实现Mapping
接口非常简单,这意味着您的对象可以作为dict进行duck-type。
而且,如果你这样做,你可以使用与dict一样的代码:
maxNum = max(hashTable.values())