创建一个程序,该程序计算列表object_list中有多少个对象具有与列表中其他某个元素相同的哈希值。输出应为这些对象的数量。如果没有匹配的哈希值,则输出应为0。
例如,如果object_list = [1、397、27468,-95、1309、397,-539874,-240767,-95、397],则输出应为5。
请注意,列表中并非每个对象都可以哈希!
# the object_list has already been defined
from collections.abc import Hashable
output = 0
# write your code here
for obj in object_list:
if isinstance(obj, Hashable) == True:
hash_value = obj
if hash_value.__eq__(object_list):
output += 1
print(output)
如果具有__hash__
魔术方法,则可以测试对象是否可哈希。要计算相同散列值的数量,可以使用collection.Counter
和sum()
内置方法。
例如:
from collections import Counter
object_list = [1, 397, 27468, -95, 1309, 397, -539874, -240767, -95, 397]
s = sum(v for v in Counter(hash(v) for v in object_list if getattr(v, '__hash__')).values() if v > 1)
print(s)
打印:
5
简单列表理解
sum([1 for obj in object_list if isinstance(obj, Hashable) and hash(obj)>1])