Beg*_*man 0 python return list-comprehension
是否可以将 return 语句放入列表理解中?
[foo.remove(i) for i in bar]
return ''.join(foo)
Run Code Online (Sandbox Code Playgroud)
我的猜测是否定的,因为 return 语句之后的代码没有执行。
return是一个声明。
列表推导式不能包含语句,只能包含表达式。
\n\n事实上,这对所有人来说都是如此:它们只能包含其他表达式。
\n\n所以,不,你不能将 a 放入return列表理解中。
如果您确实需要foo就地进行变异,那么您尝试做的事情最好写成一个for语句(作为一个复合语句,当然可以包含其他语句):
for i in bar: foo.remove(i)\nreturn \'\'.join(foo)\nRun Code Online (Sandbox Code Playgroud)\n\n虽然推导式比构建列表的语句更快,for但这主要是因为它们可以使用专门优化的list.append. 如果您实际上并不想要生成的列表,那么它们会更慢,因为即使非常快,list.append仍然比根本不构建列表慢很多。
而且,更重要的是,仅仅为了副作用而使用推导式不仅效率低下,而且还使您的代码不那么惯用,并且更难以理解。
\n\n无论如何,如果您确实需要优化此代码,您可能不应该foo就地进行更改。每次调用 时foo.remove(i),都需要线性工作来查找第一次出现的位置i,然后将列表的其余部分向上移动。因此,如果bar的大小与 大致相同foo,则需要进行二次工作。但您可以复制列表,并在线性时间内进行过滤:
barset = set(bar)\nreturn \'\'.join([x for x in foo if x not in barset])\nRun Code Online (Sandbox Code Playgroud)\n\n(我假设这里你没有任何重复的值,并且foo\ barxe2\x80\x94 如果有的话,我愿意打赌remove实际上并没有做你想做的事情。但是,如果是这样,你确实需要一些更复杂的东西。)
| 归档时间: |
|
| 查看次数: |
11537 次 |
| 最近记录: |