gpt4 book ai didi

python - 在一行中将字符串列表转换为多种数据类型

转载 作者:行者123 更新时间:2023-11-28 21:59:42 25 4
gpt4 key购买 nike

我想在一行中将字符串列表转换为正确的类型(即 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()]

最佳答案

压缩和应用转换函数有效,并且比 literal_eval 快得多。

此外,如果字符串值不包含引号,则 literal_eval 会引发“ValueError:格式错误的字符串”,这可能会出现问题,具体取决于您的数据。

from StringIO import StringIO
from time import time
import ast

def zip_test():
# Using StringIO to illustrate using something file-like.
for row in StringIO('a 1.0 2 True\n' * 32):
(a, b, c, d) = [f(v) for (f, v) in zip(
(str, float, int, lambda v: v == 'True'), row.split())]

def ast_test():
for row in StringIO('"a" 1.0 2 True\n' * 32):
(a, b, c, d) = [ast.literal_eval(s) for s in row.split()]

for f in (zip_test, ast_test):
start = time()
for i in range(100):
f()
print '%s: %s' % (f.func_name, time() - start)


# [ ** Results ** ]
#
# zip_test: 0.0131301879883
# ast_test: 0.0835828781128

关于python - 在一行中将字符串列表转换为多种数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com