可以使用ast.literal_eval,一般应该避免使用eval:
l= ['[1,2,3]','[10,12,5]']
from ast import literal_eval
print([literal_eval(ele) for ele in l])
[[1, 2, 3], [10, 12, 5]]
或者索引、拆分和映射:
print([list(map(int,ele[1:-1].split(","))) for ele in l])
[[1, 2, 3], [10, 12, 5]]
如果你总是有相同的格式分割是最有效的解决方案:
In [44]: %%timeit
l= ['[1,2,3]','[10,12,5]']
l = [choice(l) for _ in range(1000)]
[eval(ele) for ele in l]
....:
100 loops, best of 3: 8.15 ms per loop
In [45]: %%timeit
l= ['[1,2,3]','[10,12,5]']
l = [choice(l) for _ in range(1000)]
[literal_eval(ele) for ele in l]
....:
100 loops, best of 3: 11.4 ms per loop
In [46]: %%timeit
l= ['[1,2,3]','[10,12,5]']
l = [choice(l) for _ in range(1000)]
[list(map(int,ele[1:-1].split(","))) for ele in l]
....:
100 loops, best of 3: 2.07 ms per loop