在 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'
但a
和b
都是套路。
【讨论】:
这就是为什么我喜欢提醒自己集合构造函数为set([])
而不仅仅是set()
。
set()
总是采用一个参数。一个可迭代的。
@GeorgeKettleborough 单个或没有参数,后者创建一个空集。【参考方案4】:
您需要执行empty_set = set()
来初始化一个空集。 是一个空的
dict
。
【讨论】:
以上是关于在 Python 中使用花括号初始化 Set的主要内容,如果未能解决你的问题,请参考以下文章