在Python中将字符串转换并合并为列表
在Python中,我有四个字符串,它们包含了一个列表的格式:
line1 ="['a.b.c','b.c.a','c.d.e']"
line2 ="['def','efg']"
line3 ="['f']"
line4 ="['g']"
我该如何把它们合并在一起,得到一个有效的Python列表,比如:
SumLine = ['a.b.c','b.c.a','c.d.e','def','efg','f','g']
6 个回答
1
一个简单粗暴的方法是用 eval
:
SumLine = eval(line1) + eval(line2) + eval(line3) + eval(line4)
但是,如果这些字符串是从别人那里来的(比如用户输入),就不要这么做。
11
import ast
line1 ="['a.b.c','b.c.a','c.d.e']"
line2 ="['def','efg']"
line3 ="['f']"
line4 ="['g']"
SumLine = []
for x in (line1, line2, line3, line4):
SumLine.extend(ast.literal_eval(x))
print SumLine
除非你对要评估的字符串有超乎寻常的信任,否则不要使用内置的 eval
。虽然 ast.literal_eval
只能处理简单的常量,但它是完全安全的,因此通常更值得推荐。
2
简单的方法是把字符串拼接成一个可以计算的表达式,这样就能得到想要的结果:
line1 ="['a.b.c','b.c.a','c.d.e']"
line2 ="['def','efg']"
line3 ="['f']"
line4 ="['g']"
lines = [line1, line2, line3, line4]
print eval('+'.join(lines))
不过,如果你不能信任输入的数据,这样做就不安全。所以如果你使用的是Python 2.6或更高版本,建议使用ast模块里的安全评估函数ast.literal_eval
。不过,这个方法不能和拼接的'+'技巧一起用,所以你需要逐个处理每个元素。