用函数方式替换List中的满足特殊条件的元素

时间:2011-10-01 22:30:03

标签: python functional-programming list-comprehension

我有一个列表[1, 2, 3, -100, 2, -100]。 我需要将-100替换为"ERROR",将其他替换为相应的字符串。

我可以像这样编码。

resList = []
for val in list:
    if val == -100:
        resList.append("ERROR")
    else:
        resList.append("%d" % val)

我怎样才能以功能的方式做同样的事情。

我尝试过映射。

resList = map(lambda w: if w == -100: "ERROR" else:("%d" % val), list)

但是它没有编译,因为它有语法错误。 他们怎么了?

5 个答案:

答案 0 :(得分:2)

这个不起作用:

resList = map(lambda w: if w == -100: "ERROR" else:("%d" % val), list)

它失败了,因为你不能在lambda表达式中有一个块。

我更喜欢list comprehension方法:

resList = ['ERROR' if item == -100 else item for item in yourlist]

这不应该产生任何错误。如果您收到错误,那是因为您的程序中的其他地方存在错误。或者缩进也许是错误的。发布您获得的特定错误消息。

另外,我建议你不要将名称list用于局部变量,因为它隐藏了同名的内置函数。

答案 1 :(得分:1)

这有效:

["ERROR" if -100 == val else str(val) for val in list]

答案 2 :(得分:1)

如果正确使用python三元运算符并且一致地使用“w”lambda参数,则映射将起作用。

map(lambda w: "ERROR" if w == -100 else ("%d" % w), list)

答案 3 :(得分:0)

此代码将执行此操作:

list = [1, 2, 3, -100, 2, -100]
resList = ['ERROR' if x == -100 else str(x) for x in list ]

答案 4 :(得分:0)

这是一些看似奇怪的代码,但它确实有效:

resList = ["%s%s" % ("ERROR" * (val == -100), ("%d" % val) * (val != -100)) for val in list]

产生

['1', '2', '3', 'ERROR', '2', 'ERROR']