我想按照以下步骤激活一个功能:
1.首先过滤掉所有非数字字符。
2.计算这些数字的任何线性函数。
3.计算每个结果的产品并返回答案。
例如:
>>print(digit_com_mul("8?97D4b"))
36
这是我试图执行的功能,但我不明白过滤器后如何将字符串转换成数字
def digit_complete_mul(data):
return reduce(lambda x,y:x*y,map(lambda x: 10-x,int(filter(lambda x:x.isdigit(),data))))
答案 0 :(得分:0)
使用字符串(s
)和线性函数(f
),以下工作:
def func(s, f):
l = (f(int(c)) for c in s if c.isdigit())
p = 1
for i in l:
p *= i
return p
您还可以使用functools.reduce
方法:
def func(s, f):
l = (f(int(c)) for c in s if c.isdigit())
return functools.reduce(lambda x,y : x*y, l)
(如果你愿意,你可以将第一行扔到第二行,但稍微不必要)
两者都给出了预期的输出:
>>> func('a1b2cd3e', lambda x: x+1)
24
>>> 2 * 3 * 4 #<-- same calc.
24
答案 1 :(得分:0)
考虑:
digits = (int(c) for c in input_string if c.isdigit())
values_of_f = map(f, digits)
product = functools.reduce(lambda acc, x: acc * x, values_of_f)
先写下来,稍后内联(如果有的话)。
答案 2 :(得分:0)
所以我找到了办法。
只需在线性函数中将字符更改为int:
from functools import reduce
def digit_complete_mul(data):
return reduce(lambda x,y:x*y,map(lambda x: 10-int(x),filter(lambda x:x.isdigit(),data)))