【问题标题】:Python style: for-in syntax, checking for empty lists and dictionariesPython 风格:for-in 语法,检查空列表和字典
【发布时间】:2011-04-20 12:44:02
【问题描述】:

我是 python 新手,还没有阅读很多代码来验证哪些样式被认为是“pythonic”。

当我开始编写代码时,我一直在使用这种模式。

listThatMightBeEmpty = []
for items in listThatMightBeEmpty:
    print "this may or may not print but the loop won't cause any errors"

我认为首先检查列表是否为空是多余的——如果列表为空,我可以让 for-in 循环不执行任何操作。但我想确保在任何情况下都没有任何陷阱,包括使用旧版本的 python,包括在字典上使用 for-in 循环,使用 enumerate() 或 iteritems(),或使用列表推导等。

【问题讨论】:

  • 在编码时,我倾向于在不同的窗口中打开一个交互式 python 会话,所以如果我对特定情况感到好奇,我可以边做边做实验。但是,这个特殊的问题是您普遍想知道的,答案几乎是没有陷阱。完全有可能创建一个像列表一样的对象,除非它在为空时访问它会引发异常,或者返回字符串“418 I'm a teapot”,或者其他令人惊讶的东西,但这将是一个非常不寻常且非 Python 的情况.

标签: python list idioms


【解决方案1】:

是的,你是对的。这里没有陷阱。您可以在空列表中使用它。

【讨论】:

    【解决方案2】:

    要检查列表是否为空,您可以这样做:

    >>> x = []
    >>> if not x:
             # do something
    

    如果列表为空,# do something 将运行,您可以在那里处理执行。

    但是,您的方法没有任何问题。

    【讨论】:

      【解决方案3】:

      是的,它是多余的(除非您想为空输入执行一些特殊的操作)。

      一般来说,如果您输入零项,则返回另一个您可以迭代的东西的 for 循环和函数不会给出任何“令人惊讶的行为”。这包括enumerate()iteritems(),甚至切片([][1:] == [])。

      >>> list( enumerate([]) )
      []
      >>> list( {}.iteritems() )
      []
      >>> [][1:]
      []
      >>> [x*x for x in []]
      []
      

      【讨论】:

        猜你喜欢
        • 2021-06-28
        • 1970-01-01
        • 2020-04-27
        • 2016-03-27
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-10
        相关资源
        最近更新 更多