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