有时我有一个列表,我想用它做一些设置动作。我所做的就是写下这样的话:
>>> 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()
创建列表集?
答案 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}