[] =空列表
() =空元组
{} =空字典
空集合有类似的符号吗? 或者我必须写set()?
[] =空列表
() =空元组
{} =空字典
空集合有类似的符号吗? 或者我必须写set()?
当前回答
是的。适用于非空dict/set的表示法也适用于空dict/set。
注意非空字典和集合字面量之间的区别:
{1: 'a', 2: 'b', 3: 'c'}——里面有许多键-值对组成字典 {'aaa', 'bbb', 'ccc'}—其中的值元组组成一个set
So:
{} == 0个键值对==空字典 {*()} ==值的空元组==空集
然而,你能做的事实并不意味着你应该做。除非你有一些强有力的理由,否则最好显式地构造一个空集,比如:
a = set()
Performance: The literal is ~15% faster than the set-constructor (CPython-3.8, 2019 PC, Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz): >>> %timeit ({*()} & {*()}) | {*()} 214 ns ± 1.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) >>> %timeit (set() & set()) | set() 252 ns ± 0.566 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) ... and for completeness, Renato Garcia's frozenset proposal on the above expression is some 60% faster! >>> ϕ = frozenset() >>> %timeit (ϕ & ϕ) | ϕ 100 ns ± 0.51 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
注意:正如ctrueden在注释中注意到的,{()}不是一个空集。它是一个只有一个元素的集合:空元组。
其他回答
这取决于你是想用文字进行比较,还是赋值。
如果你想让一个现有的集合为空,你可以使用.clear()方法,特别是如果你想避免创建一个新对象。如果要进行比较,请使用set()或检查长度是否为0。
例子:
#create a new set
a=set([1,2,3,'foo','bar'])
#or, using a literal:
a={1,2,3,'foo','bar'}
#create an empty set
a=set()
#or, use the clear method
a.clear()
#comparison to a new blank set
if a==set():
#do something
#length-checking comparison
if len(a)==0:
#do something
更疯狂的想法是:在Python 3接受unicode标识符的情况下,你可以声明一个变量φ = frozenset() (φ = U+03D5)并使用它。
是的。适用于非空dict/set的表示法也适用于空dict/set。
注意非空字典和集合字面量之间的区别:
{1: 'a', 2: 'b', 3: 'c'}——里面有许多键-值对组成字典 {'aaa', 'bbb', 'ccc'}—其中的值元组组成一个set
So:
{} == 0个键值对==空字典 {*()} ==值的空元组==空集
然而,你能做的事实并不意味着你应该做。除非你有一些强有力的理由,否则最好显式地构造一个空集,比如:
a = set()
Performance: The literal is ~15% faster than the set-constructor (CPython-3.8, 2019 PC, Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz): >>> %timeit ({*()} & {*()}) | {*()} 214 ns ± 1.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) >>> %timeit (set() & set()) | set() 252 ns ± 0.566 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) ... and for completeness, Renato Garcia's frozenset proposal on the above expression is some 60% faster! >>> ϕ = frozenset() >>> %timeit (ϕ & ϕ) | ϕ 100 ns ± 0.51 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
注意:正如ctrueden在注释中注意到的,{()}不是一个空集。它是一个只有一个元素的集合:空元组。
不,空集合没有文字语法。你必须写set()。
只是扩展一下公认的答案:
从2.7和3.1版本开始,python已经以用法{1,2,3}的形式获得了set literal{},但{}本身仍然用于空字典。
Python 2.7(第一行在Python <2.7中无效)
>>> {1,2,3}.__class__
<type 'set'>
>>> {}.__class__
<type 'dict'>
Python 3. x
>>> {1,2,3}.__class__
<class 'set'>
>>> {}.__class__
<class 'dict'>
更多信息请点击:https://docs.python.org/3/whatsnew/2.7.html#other-language-changes