将列表中的字符串转换为浮点数

时间:2017-10-16 22:09:21

标签: python string list tuples

我现在有一个类型为“string”的数值列表。此列表中的某些元素具有多个值,例如:

AF=['0.056', '0.024, 0.0235', '0.724', '0.932, 0.226, 0.634']

另一个原因是某些元素可能是.

话虽如此,我一直在尝试将此列表的元素转换为浮点数(如果有多个值仍保留元组),但我不断收到以下错误:

ValueError: could not convert string to float: .

我已经尝试了很多东西来解决这个问题,其中最新的一个是:

for x in AF:
    if "," in x: #if there are multiple values for one AF
        elements= x.split(",")
        for k in elements: #each element of the sub-list
            if k != '.':
                k= map(float, k)
                print(k) #check to see if there are still "."
            else:
                pass

但是当我运行它时,我仍然会得到同样的错误。所以我从上面的循环中打印了k,果然,列表中仍然有.,尽管我声明不要在字符串到浮点转换中包含它们。

这是我想要的输出: AF=[0.056, [0.024, 0.0235], 0.724, [0.932, 0.226, 0.634]]

3 个答案:

答案 0 :(得分:1)

def convert(l):
    new = []
    for line in l:
        if ',' in line:
            new.append([float(j) for j in line.split(',')])
        else:
            try:
                new.append(float(line))
            except ValueError:
                pass
    return new

>>> convert(AF)
[0.056, [0.024, 0.0235], 0.724, [0.932, 0.226, 0.634]]

答案 1 :(得分:0)

如果您尝试这样做:

result = []
for item in AF:
    if item != '.':
        values = list(map(float, item.split(', ')))
        result.append(values)

你得到:

[[0.056], [0.024, 0.0235], [0.724], [0.932, 0.226, 0.634]]

您可以使用理解列表进行简化:

result = [list(map(float, item.split(', ')))
          for item in AF
          if item != '.']

答案 2 :(得分:0)

使用re.findall()函数(在扩展输入列表上):

import re

AF = ['0.056', '0.024, 0.0235, .', '.', '0.724', '0.932, 0.226, 0.634', '.']
result = []

for s in AF:
    items = re.findall(r'\b\d+\.\d+\b', s)
    if items:
        result.append(float(items[0]) if len(items) == 1 else list(map(float, items)))

print(result)

输出:

[0.056, [0.024, 0.0235], 0.724, [0.932, 0.226, 0.634]]