【发布时间】:2015-06-22 17:29:23
【问题描述】:
如何在列表推导式或 eval 中使用多行语句?
我试图把这段代码转过来:
def f(x, y, b=''):
for i in x:
if i in y:
y.remove(i)
i *= 2
b += i
return b
像这样进入一个 lambda 函数:
j=lambda x,y:''.join(eval('y.remove(i);i*2')if i in y else i for i in x)
x 是一个字符串,例如 'onomatopoeia',y 是一个列表,例如 ['o','a','o']。
但由于某种原因,它返回语法错误。谁能解释一下?
【问题讨论】:
-
x和y的值是什么? -
你到底为什么要这样做?
-
预期输出是什么??
oonoomaatopoeia? -
也许他正在寻找一种使用 lambda 的漂亮方法
-
我同意其他人的观点,即你永远不应该这样做,但如果你这样做,至少不要使用 eval。您可以简单地使用
y.pop(y.index(i)) + i或2 * y.pop(y.index(i))代替您的 eval 调用。附带说明一下,我怀疑您对性能感兴趣,但是当您一一删除列表中的所有元素时,该算法的效率相当低;更快的替代方法是使用collections.Counter并减少字母的数量。
标签: python lambda eval list-comprehension