使用Python计算int和浮点数的有效方法

时间:2018-08-09 08:19:51

标签: python regex

有没有一种有效的方法来查找int和浮点数的字符串,而无需使用两个不同的列表理解

st = '2.00 00 DBEL 215 Frox Lyxo 2.000 2.00'

reg = r'\d+(?:\.\d*)?'

out = re.compile(reg).findall(st)

# output as  ['2.00', '00', '215', '2.000', '2.00']

int_in_string = len([i for i in out if isinstance(eval(str(i)), int)])
fl_in_string = len([i for i in out if isinstance(eval(str(i)), float)])

print('no of int : ', int_in_string, 'no of float : ', fl_in_string)

4 个答案:

答案 0 :(得分:2)

看看以下内容:

st = '2.00 00 DBEL 215 Frox Lyxo 2.000 2.00'

floats, ints = 0, 0
for word in st.split():
    try:
        int(word)
    except ValueError:
        try:
            float(word)
        except ValueError:
            pass
        else:
            floats += 1
    else:
        ints += 1

print('no of int : ', ints, 'no of float : ', floats)  # no of int :  2 no of float :  3

我的代码采用了不同的方法。 regex未使用。字符串在空白处为split,单个单词被强制转换为float块内的inttry。如果尝试成功(块的else部分),计数器将增加。

答案 1 :(得分:0)

您不需要再次将数字实际保存在int_in_stringfl_in_string上,因此您可以使用两个简单的计数器

int_in_string = 0
fl_in_string   = 0
for i in out:
    if isinstance(eval(str(i)), int):
        int_in_string += 1
    elif isinstance(eval(str(i)), float):
        fl_in_string += 1

答案 2 :(得分:0)

如果您所有的整数都遵循\d+模式,而所有的浮点数都遵循\d+\.\d+模式,则可以按以下方式对其进行计数

>>> num_ints = sum(1 for _ in re.finditer(r'(?<=\W)\d+(?=\W)', st))
>>> num_floats = sum(1 for _ in re.finditer(r'(?<=\W)\d+\.\d+(?=\W)', st))
>>> print (num_ints, num_floats)
6 1

答案 3 :(得分:0)

假定不是正则表达式。

st = '2.00 00 DBEL 215 Frox Lyxo 2.000 2.00'
s = [i.isdigit() for i in st.split(' ') if not(i.isalpha())]
print('no of int : ', s.count(True), 'no of float : ', s.count(False))