为了账号安全,请及时绑定邮箱和手机立即绑定

将列表的字符串表示转换为列表

将列表的字符串表示转换为列表

慕丝7291255 2019-05-24 15:31:03
将列表的字符串表示转换为列表我想知道最简单的方法是将string如下列表转换为list:x = u'[ "A","B","C" , " D"]'即使用户在逗号和引号内的空格之间放置空格也是如此。我需要处理它:x = ["A", "B", "C", "D"]在Python中。我知道我可以剥夺的空间与strip()和split()使用拆分操作和检查非字母。但是代码变得非常糟糕。有一个我不知道的快速功能吗?
查看完整描述

4 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

>>> import ast

>>> x = u'[ "A","B","C" , " D"]'

>>> x = ast.literal_eval(x)

>>> x

['A', 'B', 'C', ' D']

>>> x = [n.strip() for n in x]

>>> x

['A', 'B', 'C', 'D']

ast.literal_eval

使用ast.literal_eval,您可以安全地评估表达式节点或包含Python表达式的字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。


查看完整回答
反对 回复 2019-05-24
?
冉冉说

TA贡献1877条经验 获得超1个赞


这eval很危险 - 你不应该执行用户输入。


如果你有2.6或更新,使用ast而不是eval:


>>> import ast

>>> ast.literal_eval('["A","B" ,"C" ," D"]')

["A", "B", "C", " D"]

一旦你有了,那strip就是字符串。


如果您使用的是旧版本的Python,则可以使用简单的正则表达式非常接近您想要的内容:


>>> x='[  "A",  " B", "C","D "]'

>>> re.findall(r'"\s*([^"]*?)\s*"', x)

['A', 'B', 'C', 'D']

这不如ast解决方案,例如它不能正确处理字符串中的转义引号。但它很简单,不涉及危险的评估,并且如果你使用的是较旧的Python,可能对你的目的来说已经足够好了。


查看完整回答
反对 回复 2019-05-24
?
RISEBY

TA贡献1856条经验 获得超5个赞

json只要存在字典的字典列表,该模块就是更好的解决方案。该json.loads(your_data)函数可用于将其转换为列表。


>>> import json

>>> x = u'[ "A","B","C" , " D"]'

>>> json.loads(x)

[u'A', u'B', u'C', u' D']

同样


>>> x = u'[ "A","B","C" , {"D":"E"}]'

>>> json.loads(x)

[u'A', u'B', u'C', {u'D': u'E'}]


查看完整回答
反对 回复 2019-05-24
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

import ast

l = ast.literal_eval('[ "A","B","C" , " D"]')

l = [i.strip() for i in l]


查看完整回答
反对 回复 2019-05-24
  • 4 回答
  • 0 关注
  • 1402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信