【发布时间】:2019-03-30 01:50:10
【问题描述】:
S=set()
for i in range(1,100):
for j in range(1,100):
for k in range(1,100):
if i**2+j**2==k**2:
S.add(([i,j,k]))
print S
错误是
TypeError Traceback (most recent call last)
<ipython-input-45-606e3083d711> in <module>()
4 for k in range(1,100):
5 if i**2+j**2==k**2:
----> 6 S.add(([i,j,k]))
7 print S
TypeError: unhashable type: 'list'
我只想得到所有不同的毕达哥拉斯三元组 [对我来说 (3,4,5)=(4,3,5)]。这就是为什么我用集合来做这件事,但由于某种原因,我无法将集合附加到我的原始集合 S...
【问题讨论】:
-
您搜索过错误吗?你不能散列列表,因为它们是可变的。
-
您只能将不可变类型添加到
tuple或frozenset之类的集合中。 -
让
j从i循环到100和k从j循环到100,这样可以避免删除重复项。 -
只是将元组添加到内置集合中无论如何都不会为您做到这一点,因为在 Python 中,
(3, 4, 5) != (4, 3, 5)。按照佩奇大卫所说的去做。 :)