这个问题很像: 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
我只希望列表中的稀疏度为非零的条目。
答案 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!=0
和for i in range(2)
部分:
>>> [i for i in range(2) if i!=0]
[1]
>>>