我现在有一个类型为“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]]
答案 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]]