我正在学习python,我有一个关于初始化集的新手问题。通过测试,我发现可以像这样初始化一个集合:
my_set = {'foo', 'bar', 'baz'}
与标准方式相反,这样做有什么不利之处:
my_set = set(['foo', 'bar', 'baz'])
还是只是风格问题?
答案 0 :(得分:81)
set literal语法有两个明显的问题:
my_set = {'foo', 'bar', 'baz'}
在Python 2.7
使用该语法无法表达空集(使用{}
创建空字典)
那些对您来说可能重要,也可能不重要。
概述此语法的文档部分为here。
答案 1 :(得分:36)
使用单个单词参数比较{}
和set()
之间的差异。
>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'}
>>> b = {'aardvark'}
>>> b
{'aardvark'}
但a
和b
都是固定的。
答案 2 :(得分:24)
来自Python 3 documentation(同样适用于python 2.7 ):
可以使用curly大括号或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 :(得分:3)
您需要执行Expected to be running in 'ProxyZone', but it was not found.
at Function.Object.<anonymous>.ProxyZoneSpec.assertPresent (../../node_modules/zone.js/dist/proxy.js:42:19)
at runInTestZone (../../node_modules/zone.js/dist/async-test.js:202:23)
at Object.<anonymous> (../../node_modules/zone.js/dist/async-test.js:168:17)
来初始化一个空集。 empty_set = set()
是空的{}
。