4

这个问题很像: Python 列表理解中的 if/else?Python 中的简单语法错误 if else dict comprehension。但我仍然不明白我在这里犯了什么错误:

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

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

4

3 回答 3

11

移动if到最后。请参阅List Comprehensions 上的 Python 文档条目

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

如果您正在寻找条件表达式,则可以执行@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]
于 2013-08-15T19:55:44.607 回答
2

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

于 2013-08-15T19:55:51.377 回答
1

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

>>> [i for i in range(2) if i!=0]
[1]
>>>
于 2013-08-15T19:56:35.150 回答