返回行结束时的语法错误 - ]

时间:2018-01-10 20:41:19

标签: python syntax-error

def filter_list(l):
##newList = []
##for x in l:
##    if isinstance(x, int):
##        newList.append(x)
##return newList

return [x in l if isinstance(x, int)]
                                    ^

如果这是重复的道歉,但我没有看到任何其他语法错误帖子有帮助。注释的代码有效,未注释的代码在最后一段时间给出了语法错误。我相信列表理解是正确的,但我不一定要问这个。为什么我会在]上遇到语法错误?

3 个答案:

答案 0 :(得分:1)

您的列表理解语法不正确。也许,你打算使用(假设l是一个可迭代的):

[x for x in l if isinstance(x, int)]

相当于:

out = []
for x in l:
    if isinstance(x, int):
        out.append(x) 

答案 1 :(得分:1)

一个容易犯的错误,但坚持下去!列表理解是帮助缩短代码的有效方法。最后一行应为:

return [x for x in l if isinstance(x, int)]

答案 2 :(得分:1)

如果您已经有明确的循环,那么它很容易将其转换为理解。

所以如果你有:

newList = []
for x in l:
    if isinstance(x, int):
        newList.append(x)

然后只需删除newlist = []并将所有内容放在[...]

[
for x in l:
    if isinstance(x, int):
        newList.append(x)
]

下一步是移动前面附加的实际元素并删除:

[
x
for x in l
    if isinstance(x, int)
]

那已经可以了,但通常你也会删除换行符:

[x for x in l if isinstance(x, int)]

至少我是如何开始的,#34;学习"理解,也许它对你有帮助。

你的代码抛出SyntaxError的原因是因为它看起来像一个"三元"缺少else子句的表达式。三元组看起来像这样:

expression1 if condition else expression2

在您的情况下,表达式1为x in l,条件为if isinstance(x, int),您错过了else expression2。这个"三元"在你的情况下将包装在一个列表中(产生一个长度 - 一个列表 - 如果你打算这样做)。例如:

>>> l = [1, 2, 3]
>>> [1 in l if isinstance(1, int) else None]
[True]