我有一个字符串,其中包含一个实数列表,例如'[0.0, 6.5, 3.0]'
如何将其转换为实数列表?
在我的python程序中,我读取了一个csv文件,并且有一列包含三色组合。当我得到它们时,我不能与它们一起工作,因为它们不是具有实数的列表。我尝试进行转换,但是当我浏览列表时会出错,因为将整数和小数部分分开的点不是数字。
if j == 'color':
color_triple = []
triple = ''.join(lines[i][j])
for i_ in range(1, len(triple)):
index = i_
while triple[index] != ',':
color = ''
color += triple[i_]
index += 1
color_triple.append(float(color))
i_ = index
我想要一个列表[0.0, 6.5, 3.0]
,并使用列表元素,因为它们是浮动的。
答案 0 :(得分:0)
这有效
string = '[5.0, 0.9, 0.4]'
arr = eval(string)
print(arr)
但是输出是
[5.0, 0.90000000000000002,0.40000000000000002]
您将不得不进行一些后期处理
编辑:
按照@ThiefMaster的建议,您可以使用抽象语法树。
import ast
string = "[5.0, 9.0, 0.3]"
arr = ast.literal_eval(string)
print(arr)
输出:
[5.0, 9.0, 0.3]
有关ast的更多信息:
ast.literal_eval(node_or_string)
安全地评估表达式 节点或包含Python文字或容器显示的字符串。的 提供的字符串或节点只能由以下Python组成 文字结构:字符串,字节,数字,元组,列表,字典, 设置,布尔值和无。这可用于安全地评估包含Python的字符串 来自不受信任来源的值,而无需解析值 自己。它不能评估任意复杂 表达式,例如涉及运算符或索引。
警告:由于中的堆栈深度限制,使用足够大/复杂的字符串可能会使Python解释器崩溃 Python的AST编译器。在版本3.2中更改:现在允许字节和 设置文字。 来源:https://docs.python.org/3/library/ast.html
答案 1 :(得分:-1)
这可能有点过分,但是使用正则表达式模式处理该字符串呢?以下代码适用于我相信您的用法。
import re
def main():
pattern = r"\[([\d]*\.[\d]*), ([\d]*\.[\d]*), ([\d]*\.[\d]*)\]"
string = "[0.0, 6.5, 3.0]"
results = re.search(pattern, string)
print(float(results.group(1)), float(results.group(2)), float(results.group(3)))
if __name__ == '__main__':
main()