使用花括号在Python中初始化Set


98

我正在学习python,并且对初始化集有一个新手问题。通过测试,我发现可以像这样初始化一个集合:

my_set = {'foo', 'bar', 'baz'}

与标准方式相反,以这种方式进行操作是否有任何缺点:

my_set = set(['foo', 'bar', 'baz'])

还是仅仅是样式问题?


2
文档确实提到了它,只是没有提到。请注意,这是不推荐使用的模块的文档,现在内置了实际集。它在“ Python 2.7的新增功能”文档中,并且语言参考简要描述了它:docs.python.org/2/reference/expressions.html#set-displays

@delnan我使用的是python 2.7,所以我不认为应该查看python 3文档。我发布的链接适用于2.7,但奇怪的是没有提到这一点。
fvrghl 2013年

1
自从我编辑了评论以来,2.7文档也提到了这一点。您发布的链接已过时,是过去的遗物,错误,已弃用。忘记它的存在,并使用它本身的内容告诉您使用:docs.python.org/2/library/stdtypes.html#setdocs.python.org/2/library/stdtypes.html#frozenset

@delnan感谢您的帮助。我对问题进行了编辑,以使我不再说没有相关的文档(尽管网上很少有提及此问题的示例)。
fvrghl

对于过路者:Pycharm警告当一个人可以使用文字时,不要使用函数调用-可能出于性能原因-因此,请更喜欢在新代码中设置文字方式
Mr_and_Mrs_D 2014年

Answers:


102

设置文字语法有两个明显的问题:

my_set = {'foo', 'bar', 'baz'}
  1. 在Python 2.7之前不可用

  2. 无法使用该语法表示空集(使用{}创建空dict)

这些可能对您很重要,也可能不重要。

概述此语法的文档部分在此处


46

也比较之间的差别{},并set()用一个字的说法。

>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'} 
>>> b = {'aardvark'}
>>> b
{'aardvark'}

但两者ab都是套路。


4
这就是为什么我想提醒自己set构造函数,set([])而不是just set()
Michael Ekoka

3
set()总是有一个论点。一个可迭代的。
乔治·基特伯勒

1
@GeorgeKettleborough一个或没有参数,后者创建一个空集。
gertvdijk

28

Python 3文档与python 2.7相同):

花括号或set()函数可用于创建集合。注意:要创建一个空集,您必须使用set()而不是{}; 后者将创建一个空字典,这是我们将在下一节中讨论的数据结构。

在python 2.7中:

>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'}
>>> my_set
set(['bar', 'foo', 'baz'])

请注意,{}它也用于map/ dict

>>> m = {'a':2,3:'d'}
>>> m[3]
'd'
>>> m={}
>>> type(m)
<type 'dict'> 

还可以使用综合语法来初始化集:

>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' }
>>> a
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])

1

您需要 empty_set = set()初始化一个空集。{}是空字典。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.