【发布时间】:2021-07-18 07:12:40
【问题描述】:
我正在做一些编码练习,最后我使用了 set 和 frozensets。
代码如下:
cities = 4
roads = [[0, 1], [1, 2], [2, 0]]
roads = set([frozenset(road) for road in roads])
output = []
for i in range(cities-1):
for j in range(i+1, cities):
if set([i,j]) not in roads:
output.append([i,j])
如您所见,嵌套的for 中的if 测试集合中是否存在集合。
但是,据我了解,在这种情况下,哈希值需要与 in 运算符一起使用。
如果我将set([i,j]) 替换为[i,j],我会收到以下错误:
TypeError: unhashable type: 'list'
所以,这是我的问题:为什么它适用于集合,它不是(据我所知)可散列而不适用于列表? 它不应该也抛出错误吗,我错过了什么?
【问题讨论】:
-
@Hcaertnit:不是这样。这“有点”微妙。
-
frozensets 是可散列的,因为它们是不可变的。