如果i!= 0 in list comprehension给出了语法错误

时间:2013-08-15 19:55:12

标签: python syntax-error list-comprehension

这个问题很像: 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

我只希望列表中的稀疏度为非零的条目。

3 个答案:

答案 0 :(得分:11)

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]

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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