如何在不引发ValueError的情况下筛选可从字符串转换为浮点的元素的列表?

时间:2018-11-18 22:56:31

标签: python

说我有以下列表

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

但是我想知道是否存在一种健壮的方法来使用filterlambda函数在一行中实现相同的目的?还是perhpas还有另一种方法?

1 个答案:

答案 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()]

isfloat函数

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

the different between str.isdigit, isnumeric and isdecimal