Skip to main content
 首页 » 编程设计

转换具有多种类型(包括列表!)的列表的 Pythonic 方法

2025年05月04日11telwanggs

给定标记列表和这些标记的适当的已知类型表示,我如何将类型映射到列表?如果类型是 int 或 floats 我可以通过字符串调用 int(x) 将值转换为 int,但是这如果我的类型是 list(或者说 numpy.array),则会失败。进行转换的最pythonic方式是什么? eval 在这里不是一个选项,因为数据基本上是未经处理的。一个例子:

line     = "0 0 62.9695 [16.859,-17.1135,46.6351] [7.1759,29.3009,83.1399]" 
tokens   = line.split() 
type_key = [int,int,float,list,list] # Lists do not convert properly here 
 
print [T(x) for T,x in zip(type_key,tokens)] 

相关:How to convert a list with multiple types to binary in Python?

请您参考如下方法:

你要的是ast.literal_eval() ,专为此目的而设计。

>>> ast.literal_eval("[16.859,-17.1135,46.6351]") 
[16.859, -17.1135, 46.6351] 

编辑:根据您评论中的问题:

def literal_eval_to_array(literal): 
    return np.array(ast.literal_eval(literal)) 

然后您可以在 type_key 中简单地使用 literal_eval_to_array() - 请记住函数调用和实例化与 Python 相同。