说我有以下列表
w = ['Elapsed', 'time:', '0', 'days', '8', 'hours', '22', 'minutes', '15.9', 'seconds.']
我要过滤此列表,仅返回可以转换为浮点数的元素,而无需提高ValueError
。我能做
l = []
for el in w:
try:
l.append(float(el))
except ValueError:
continue
但是我想知道是否存在一种健壮的方法来使用filter
和lambda
函数在一行中实现相同的目的?还是perhpas还有另一种方法?
答案 0 :(得分:0)
l = list(map(float, filter(lambda x: x.replace('.', '', 1).lstrip('+-').isdecimal(), w)))
l = [float(x) for x in w if x.replace('.', '', 1).lstrip('+-').isdecimal()]
def isfloat(x: str) -> bool:
x = x.replace('.', '', 1) # strip first '.', so we can use isdecimal
x = x.lstrip('+-') # strip sign(prosible)
return x.isdecimal()