如何过滤所有非数字字符和数字以从字符串到数字

How to filter all non-numeric characters ,and digits to make from string to numbers

我想通过以下步骤激活一个功能:

1.First过滤掉所有非数字字符。

2.Calculate 这些数字的任何线性函数。

3.Calculate 每个结果与 return 一个答案的乘积。

例如:

>>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))))

对于一个字符串 (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

考虑:

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)

先写下来,然后内联(如果有的话)。

所以我想办法了。

只是在线性函数中将字符更改为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)))