使用{}从列表创建集合

时间:2016-03-24 11:13:15

标签: python list python-3.x set

有时我有一个列表,我想用它做一些设置动作。我所做的就是写下这样的话:

>>> mylist = [1,2,3]
>>> myset = set(mylist)
{1, 2, 3}

今天我发现从Python 2.7你也可以通过直接说{1,2,3}来定义一个集合,它似乎是一种定义它的等效方式。

然后,我想知道我是否可以使用这种语法从给定列表创建一个集合。

{list}失败,因为它尝试创建一个只包含一个元素的集合,即列表。列表不可用。

>>> mylist = [1,2,3]
>>> {mylist}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

所以,我想知道:有没有办法使用{}语法而不是set()创建列表集?

3 个答案:

答案 0 :(得分:4)

基本上它们不等同(表达式与功能)。将{}添加到python的主要目的是因为 set comprehension (如list comprehension),你也可以通过传递一些可哈希的对象来创建一个集合。

因此,如果您想使用迭代中的{}创建一个集合,您可以使用如下的集合理解:

{item for item in iterable}

另请注意,空括号表示python中的字典而不是集合。因此,如果您只想创建一个空集,正确的方法是使用set()函数。

答案 1 :(得分:2)

我最近问了一个相关的问题:Python Set: why is my_set = {*my_list} invalid?。如果您使用的是Python 3.5,我的问题包含您的答案

>>> my_list = [1,2,3,4,5]
>>> my_set = {*my_list}
>>> my_set
   {1, 2, 3, 4, 5}

它不适用于Python 2(这是我的问题)

答案 2 :(得分:1)

您可以使用

>>> ls = [1,2,3]
>>> {i for i in ls}
{1,2,3}