[英]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.