【问题标题】:if i!=0 in list comprehension gives syntax errorif i!=0 in list comprehension 给出语法错误
【发布时间】:2013-08-15 19:55:11
【问题描述】:

这个问题很像: if/else in Python's list comprehension?Simple syntax error in Python if else dict comprehension 。但我仍然不明白我在这里犯了什么错误:

[i if i!=0 for i in range(2)]
             ^
       syntax error

我只想要列表中非零的稀疏条目。

【问题讨论】:

  • 别忘了接受答案。 :)
  • 好的。谢谢你的帮助。不要忘记编辑您的个人资料描述:)

标签: python syntax-error list-comprehension


【解决方案1】:

if 移到末尾。参考The Python Docs entry on List Comprehensions

>>> [i for i in range(2) if i!=0] # Or [i for i in range(2) if i]
[1]

如果您正在寻找conditional expression,您可以执行@Martijn 指出的类似操作,

>>> [i if i!=0 else -1 for i in range(2)]
[-1, 1]

如果您只想要非零实体,您也可以filter(...) 您的列表。

>>> filter(None, [1, 2, 0, 0, 4, 5, 6])
[1, 2, 4, 5, 6]

【讨论】:

  • 感谢您提供指向docs.python.org/2/tutorial/…的链接
  • @Leo:很高兴为您提供帮助。当系统允许您接受答案时,请随意接受。 :)
  • 是的,我打算再过 7 分钟。我不明白为什么理解需要与循环相同的顺序。只是约定?
  • Comprehensions 子句需要它们的顺序,因为语法是从数学中的集合理解中计算出来的,它使用该顺序,并且因为它们几乎完全等同于循环,所以让它们看起来很有意义一样的。
  • [i if i!=0 else -1 for i in range(2)] 也许? if 可能是一个不完整的条件表达式。
【解决方案2】:

if 谓词出现在列表理解中 for i in range(2) 的规范之后。您还可以拥有任意数量的ifs。

【讨论】:

    【解决方案3】:

    切换if i!=0for i in range(2) 部分:

    >>> [i for i in range(2) if i!=0]
    [1]
    >>>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2022-12-26
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      相关资源
      最近更新 更多