我的程序(未显示)因为插入我的列表的外部双引号而中断。我怎样才能使我的列表x中没有双引号呢?
s = "('x',),('y',)"
print s
('x',),('y',)
x = []
x.append(s)
print x
["('x',),('y',)"]
当我打印x时,我希望输出看起来像这样(没有双引号) 打印x [( 'X',),( 'Y',)]
答案 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)方式。