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

Posted

技术标签:

【中文标题】在 Python 中使用花括号初始化 Set【英文标题】:Use curly braces to initialize a Set in Python 【发布时间】:2013-06-26 17:25:29 【问题描述】:

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

my_set = 'foo', 'bar', 'baz'

与标准方式相比,这样做有什么缺点吗:

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

还是只是风格问题?

【问题讨论】:

文档确实提到了它,只是没有。请注意,这是已弃用模块的文档,现在已内置 real 集。它在“Python 2.7 中的新增功能”文档中,语言参考对其进行了简要描述:docs.python.org/2/reference/expressions.html#set-displays @delnan 我使用 python 2.7,所以我没想到查看 python 3 文档。我发布的链接是针对 2.7 的,但奇怪的是没有提到这一点。 自从我编辑了我的评论后,2.7 文档也提到了这一点。您发布的链接已过时,是过去的遗物,错误的,已弃用。忘记它的存在并使用它本身告诉您使用的东西:docs.python.org/2/library/stdtypes.html#set 和 docs.python.org/2/library/stdtypes.html#frozenset @delnan 感谢您帮助我。我编辑了这个问题,所以我不再说它没有文档(尽管网上提到这个的例子很少)。 对于路人:Pycharm 警告不要在可以使用文字时使用函数调用 - 可能存在性能原因 - 所以更喜欢在新代码中设置文字方式 【参考方案1】:

set 字面量语法有两个明显的问题:

my_set = 'foo', 'bar', 'baz'

    在 Python 2.7 之前不可用

    无法使用该语法表示空集(使用 创建一个空字典)

这些对你来说可能重要也可能不重要。

概述此语法的文档部分是here。

【讨论】:

【参考方案2】:

来自Python 3 documentation(同样适用于 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', '', ''])

【讨论】:

【参考方案3】:

还比较set() 之间的区别与单个单词参数。

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

ab 都是套路。

【讨论】:

这就是为什么我喜欢提醒自己集合构造函数为set([]) 而不仅仅是set() set() 总是采用一个参数。一个可迭代的。 @GeorgeKettleborough 单个或没有参数,后者创建一个空集。【参考方案4】:

您需要执行empty_set = set() 来初始化一个空集。 是一个空的dict

【讨论】:

以上是关于在 Python 中使用花括号初始化 Set的主要内容,如果未能解决你的问题,请参考以下文章

python中,花括号,中括号,小括号的区别

为啥列表初始化(使用花括号)比其他方法更好?

Python中小括号,中括号,大括号怎么用?

python括号区别

这些花括号在 python Django 中是啥意思? **

vue页面在加载的时候闪烁花括号{{}} 解决非工程化项目初始化页面闪动问题