创建一个程序来计算列表object_list中有多少个对象具有与列表中其他元素相同的哈希值

问题描述 投票:0回答:1

创建一个程序,该程序计算列表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)
python hash hashtable hashcode
1个回答
0
投票

如果具有__hash__魔术方法,则可以测试对象是否可哈希。要计算相同散列值的数量,可以使用collection.Countersum()内置方法。

例如:

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

0
投票

简单列表理解

sum([1  for obj in object_list if isinstance(obj, Hashable) and hash(obj)>1])
© www.soinside.com 2019 - 2024. All rights reserved.