【问题标题】:Use curly braces to initialize a Set in Python在 Python 中使用花括号初始化 Set
【发布时间】: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#setdocs.python.org/2/library/stdtypes.html#frozenset
  • @delnan 感谢您帮助我。我编辑了这个问题,所以我不再说它没有文档(尽管网上提到这个的例子很少)。
  • 对于路人:Pycharm 警告不要在可以使用文字时使用函数调用 - 可能存在性能原因 - 所以更喜欢在新代码中设置文字方式

标签: python python-2.7 set


【解决方案1】:

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

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

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

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

概述此语法的文档部分是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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 2012-08-04
        • 2018-05-14
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        相关资源
        最近更新 更多