转换包含实数的字符串列表

时间:2019-04-30 21:24:40

标签: python python-3.x

我有一个字符串,其中包含一个实数列表,例如'[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],并使用列表元素,因为它们是浮动的。

2 个答案:

答案 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()