我想从列表中创建一个集合,以便在运行时将项目插入其中。我正在尝试这种方式

时间:2019-05-18 13:52:54

标签: python

我想从列表中创建一个集合,以便在运行时将项目插入其中。我正在尝试这种方式。

l=[input().split()]
s=set(l)

出现错误 TypeError:无法散列的类型:“列表”

1 个答案:

答案 0 :(得分:3)

input().split()已经为您提供了一个列表,您无需将其包装到另一个列表中

l=input().split()
s=set(l)
print(s)

输出将为

1 2 3 1 2 3
{'2', '3', '1'}

您无法通过将列表强制转换为集合来将列表转换为集合,这是因为set要求提供可选的iterable参数,所以集合的元素必须是可哈希的。 br /> 对于列表而言,这是适用的,因为可迭代的元素integer是可哈希的,但对于列表的列表而言,由于迭代的元素,所以列表不可哈希的

从文档中:https://docs.python.org/3/glossary.html#term-hashable

  

所有Python不变的内置对象都是可哈希的;可变容器(例如列表或字典)不是。

In [36]: set([1,2,3])                                                                                                                                                                                                        
Out[36]: {1, 2, 3}

In [37]: set([[1,2,3]])                                                                                                                                                                                                      

TypeError: unhashable type: 'list'