我有数百万个格式的字符串
"[(0, 1, 2), (3, 4, 5), (6, 7, 8)...]"
我需要将其转换为包含元组的python列表。我发现eval
(不好而且很慢)和ast.literal_eval
有点快,但是我正在寻找更快的东西(如果存在)。不幸的是,json.loads
对我不起作用,因为由于括号的原因,字符串在技术上不是有效的JSON。
答案 0 :(得分:0)
我不知道ipython timeit魔术方法的准确性如何,但以下结果似乎足够好:
In [28]: s = "[(0, 1, 2), (3, 4, 5), (6, 7, 8)]"
In [29]: %timeit l = eval(s)
100000 loops, best of 3: 12.4 µs per loop
In [30]: %timeit l = ast.literal_eval(s)
10000 loops, best of 3: 21.2 µs per loop
In [31]: %timeit l = [tuple(x) for x in json.loads(s.replace('(', '[').replace(')', ']'))]
The slowest run took 6.04 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 2.8 µs per loop
答案 1 :(得分:0)
json.loads()
无法理解元组,但可以理解数组[]
。
我不知道这是最佳方法,但是可以用来解决问题。
这里的技巧是将(
替换为[
,将)
替换为]
。
import json
data = "[(1,2,3),(4,5,6)]"
data = data.replace("(", "[")
data = data.replace(")", "]")
data = json.loads(data)
tuple_list = []
for t in data :
tuple_list.append(tuple(t))
print(tuple_list)