我有一个列表[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)
但是它没有编译,因为它有语法错误。 他们怎么了?
答案 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']