【发布时间】:2017-08-03 03:43:40
【问题描述】:
我没有被击中或任何东西,但我觉得这很奇怪。下面是我处理过的代码sn-p:
from hashClass import HashTable
a = HashTable(11)
input_value = list((54,26,93,17,77,31,44,55,20))
map(lambda x: a.put(x,x),input_value))
print(a.data)
我创建了自己的哈希表类。它有一个叫做 put 的方法,它接受键值对和“HashTable.data”属性显示表中的所有值。
当我使用普通键值对的 put 方法时,它工作得很好。我知道该解决方案可以使用:
for i in input_value: a.putt(i,i)
但是我想知道为什么地图功能没有效果?当我尝试使用“put”方法映射每个 input_value 时,如果我没有错,它必须将值添加到实例中。我的原因是我可能没有使用映射值,但在映射时语法上应该更新实例变量。
下面是我创建的哈希类供参考。
class HashTable(object):
def __init__(self,size):
self.size = size
self.slots = self.size*[None]
self.data = self.size*[None]
self.values = 0
def put(self,key,value):
hashValue = self.hashFunction(key)
if self.slots[hashValue] == None:
self.slots[hashValue] = key
self.data[hashValue] = value
self.values += 1
elif self.slots[hashValue] == key:
self.data[hashValue] = value
else:
hashValue = self.reHash(hashValue)
while self.slots[hashValue] != None and self.slots[hashValue] != key:
hashValue = self.reHash(hashValue)
self.slots[hashValue] = key
self.data[hashValue] = value
self.values += 1
def reHash(self,oldValue):
return (oldValue+1)%self.size
def __len__(self):
return self.values
def get(self,key):
hashValue = self.hashFunction(key)
if self.slots[hashValue] == None:
return "No Value associated"
elif self.slots[hashValue] == key:
return self.data[hashValue]
def hashFunction(self,key):
return key%self.size
【问题讨论】:
-
您的
map行似乎有一个额外的右括号? -
我怀疑您使用的是 Python 3,其中
map返回一个迭代器。所以map不会调用该函数,直到您遍历 map 迭代器。但是,您不应该将map纯粹用于这样的副作用。 -
@PM2Ring:是的,这是有道理的。我正在使用 python3
-
类似地,这样做
[a.put(x,x) for x in input_value]是一种不好的风格,因为它使用列表推导来处理方法调用的副作用,而您实际上并不想要列表,这可能是充满None。
标签: python python-3.x class dictionary