我真的很想知道为什么第二个会出错: 如果有人可以突出显示我们可以使用列表作为集合中的元素,或者不允许在集合中包含任何可变对象,那将是非常好的。 1)
>>> x = set(["Perl", "Python", "Java"])
>>> x
set(['Python', 'Java', 'Perl'])
>>>
2)
>>> cities = set((["Python","Perl"], ["Paris", "Berlin", "London"]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
答案 0 :(得分:1)
正如您所指出的,您list
的成员不能set
(因为它不可播放)。
我认为你在第一个例子中被repr
的设置弄糊涂了。输出set(['Python', 'Java', 'Perl'])
并不表示该集合包含3个元素的列表。相反,它包含三个字符串,列表只是repr
使用的符号的一部分(因为集合构造函数需要一个可迭代的项)。请注意,项目的顺序会从您的输入更改为输出的任意顺序!
在Python 3中,集合类型repr
使用set-literal语法:
>>> x = set(["Perl", "Python", "Java"])
>>> x
{'Java', 'Perl', 'Python'}