如何过滤所有非数字字符和数字以从字符串到数字
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)))
我想通过以下步骤激活一个功能:
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)))