在Python中将字符串转换并合并为列表

4 投票
6 回答
1288 浏览
提问于 2025-04-15 16:48

在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。不过,这个方法不能和拼接的'+'技巧一起用,所以你需要逐个处理每个元素。

撰写回答