将字符串(< 0.005)转换为浮点数(0.005) - python 2.7

时间:2014-06-04 06:57:09

标签: python string numbers point floating

我有一个列表的示例,我正在迭代,并试图找到最大值,只需要数字。我忽略了空格,但需要更改'< 0.005'只有0.005,所以我可以使用它。

lst = [['<0.005'],
       ['<0.005'],
       ['2.1'],
       ['2.1'],
       ['1.7'],
       ['0.098'],
       [''],
       ['1.7'],
       ['0.91'],
       ['1.2']]

这是我的代码的相关部分

for i in range(0,9):
    if lst[i][0] != '':
       if lst[i][0] == '<0.005'
          lst[i][0] = 0.005
       elif float(lst[i][0]) > maxP[i][0]:
            maxP[i][0] = lst[i][0]

if lst[i][0] == '<0.005'似乎无法正常工作,即代码似乎只是忽略它,我得到第二个最后一行的ValueError: could not convert string to float:错误,因为它仍在尝试访问&lt ; 0.005位。

有没有办法轻松解决这个问题?理想情况下,我希望它处理诸如&lt; 0.098之类的字符串并将其转换为0.098的浮点数

非常感谢任何帮助/建议,thx

4 个答案:

答案 0 :(得分:2)

你的问题是一个空字符串(只有白色字符的字符串),而不是“&lt; 0.005”(你正确处理),你不能将空字符串转换为浮点数。

您只需要在第二行添加.strip()

for i in range(0,9):
    if lst[i][0].strip() != '':
       if lst[i][0] == '<0.005':
          lst[i][0] = 0.005
       elif float(lst[i][0]) > maxP[i][0]:
            maxP[i][0] = lst[i][0]

答案 1 :(得分:0)

您可以使用此正则表达式删除任何不属于数字的字符:

value = re.sub(r'[^0-9.-]', '', value)

当然它仍会让...55-5之类的东西通过,但如果你只想摆脱领先/尾随废话,那么正则表达式就能完成它的工作。

lst = [[float(re.sub(r'[^0-9.-]', '', x[0]))] for x in lst if x[0].strip()]

答案 2 :(得分:0)

您可以使用正则表达式删除所有不是数字的字符。

import re

def get_num_from_str(in_str):
    return re.sub("[^0-9]", "", in_str)

现在,您可以将列表中的所有项目转换为数字

答案 3 :(得分:0)

您可以使用正则表达式

import re

lst = [['<0.005'],
        ['<0.005'],
        ['2.1   '],
        ['2.1   '],
        ['1.7   '],
        ['0.098 '],
        ['      '],
        ['1.7   '],
        ['0.91  '],
        ['1.2   ']]



def findMax(ilist):
    result = 0.0
    floatPattern = re.compile('\d+.\d+')
    for el in ilist:
        myFloat = floatPattern.search(el[0])
        if myFloat != None:
            if result < float(myFloat.group()):
                result = float(myFloat.group())
    return result


print findMax(lst)