防止列表中的外部双引号

时间:2015-01-12 23:01:17

标签: python python-2.7

我的程序(未显示)因为插入我的列表的外部双引号而中断。我怎样才能使我的列表x中没有双引号呢?

s = "('x',),('y',)"
print s
('x',),('y',)

x = []
x.append(s)
print x
["('x',),('y',)"]

当我打印x时,我希望输出看起来像这样(没有双引号)     打印x     [( 'X',),( 'Y',)]

3 个答案:

答案 0 :(得分:7)

使用ast.literal_eval将Python数据的字符串表示形式转换为实际的数据结构:

>>> from ast import literal_eval
>>> s = "('x',),('y',)"
>>> literal_eval(s)
(('x',), ('y',))

literal_eval与eval的工作方式类似,但只能从字符串生成文字Python数据:字符串,数字,元组,列表,字符串,布尔值和无。比eval单独安全一点。

如果您确实需要列表与字符串中的元组:

>>> list(literal_eval(s))
[('x',), ('y',)]

答案 1 :(得分:1)

如果您想避免导入库,可以使用另一种方法:

[(k,) for k in tuple(s) if k.isalnum()]

答案 2 :(得分:0)

这个怎么样:

>>> s = "('x',),('y',)"
>>> s = eval(s)
>>> x = []
>>> x.extend(s)
>>> print(x)
[('x',),('y',)]

但要检查你是否正确地做了一切,这就是你想要的。它绝对不是解决任何问题的最直观(或pythonic)方式。