【发布时间】:2013-04-27 20:36:34
【问题描述】:
我想在一行中将字符串列表转换为正确的类型(即 int、float、boolean 等)并解压缩这些值。
是否有内置模块可以比以下更好地完成此任务?:
strLst = ["a", "1.0", "2", "True"]
a, b, c, d = [[s[0], float(s[1]), int(s[2]), bool(s[3])] for s in [strLst]][0]
编辑:
我正在从一个大文本文件创建 a、b、c、d,我希望有一种优雅的方法可以在一行上进行转换。这不仅仅是针对这个特定示例的问题,而是关于可以完成类似操作的模块的问题:
with open("file.txt") as f:
a, b, c, d = [[s[0], float(s[1]), int(s[2]), bool(s[3])] \
for s in [next(f)[:-1].split()]][0]
根据 Niclas Nilsson 的评论,我可以执行以下操作:
a,b,c,d = [ast.literal_eval(s) for s in next(f)[:-1].split()]
【问题讨论】:
-
如果你没有那个浮动,我建议
[ast.literal_eval(s) for s in strLst] -
实际上,根据我的编辑,这是完美的。
-
float 在 2.7 中对我来说似乎工作正常?
-
为什么需要一行完成?它似乎相当非pythony,因为您提出的任何解决方案都不太可能生成非常易读的代码。
-
我觉得基于我试图完成的工作,会有一个模块可以用一种非常紧凑和简洁的方式来表达这一点。正如 Niclas 上面指出的,事实证明这是真的(61 个字符)。这不是简洁和Pythonic吗?
标签: python string type-conversion