繁体   English   中英

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

[英]Converting strings within a list into floats

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

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]]

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]]

如果您尝试这样做:

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 != '.']

使用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]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM