我想知道最简单的方法是将如下列表的字符串表示转换为列表:

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

即使在用户在逗号之间加空格,在引号内加空格的情况下,我也需要处理它并将其转换为:

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

我知道我可以用strip()和split()分隔空格,并检查非字母字符。但代码变得非常笨拙。有没有我不知道的快速功能?


当前回答

如果它只是一个一维列表,则可以在不导入任何内容的情况下完成此操作:

>>> x = u'[ "A","B","C" , " D"]'
>>> ls = x.strip('[]').replace('"', '').replace(' ', '').split(',')
>>> ls
['A', 'B', 'C', 'D']

其他回答

假设您的所有输入都是列表,并且输入中的双引号实际上无关紧要,这可以通过简单的正则表达式替换来完成。这有点过时,但它就像一种魅力。还要注意,输出现在是一个Unicode字符串列表,您没有指定需要它,但考虑到Unicode输入,它似乎是有意义的。

import re
x = u'[ "A","B","C" , " D"]'
junkers = re.compile('[[" \]]')
result = junkers.sub('', x).split(',')
print result
--->  [u'A', u'B', u'C', u'D']

junkers变量包含我们不需要的所有字符的编译正则表达式(为了速度),使用]作为字符需要一些反斜杠技巧。re.sub将所有这些字符都替换为空,我们在逗号处拆分得到的字符串。

注意,这也会从条目u'[“oh no”]'->[u'ohno']中删除空格。如果这不是您想要的,则需要对regexp进行一些升级。

如果有字符串化的字典列表,json模块是更好的解决方案。可以使用json.loads(your_data)函数将其转换为列表。

>>> import json
>>> x = '[ "A","B","C" , " D"]'
>>> json.loads(x)
['A', 'B', 'C', ' D']

类似地

>>> x = '[ "A","B","C" , {"D":"E"}]'
>>> json.loads(x)
['A', 'B', 'C', {'D': 'E'}]

为了使用JSON进一步完成Ryan的回答,一个非常方便的Unicode转换函数就在这个答案中。

带双引号或单引号的示例:

>print byteify(json.loads(u'[ "A","B","C" , " D"]')
>print byteify(json.loads(u"[ 'A','B','C' , ' D']".replace('\'','"')))
['A', 'B', 'C', ' D']
['A', 'B', 'C', ' D']

这是你能做到的,

**

x = '[ "A","B","C" , " D"]'
print(list(eval(x)))

**最好的答案是公认的答案

虽然这不是一个安全的方法,但最好的答案是公认的。当答案发布时,我并没有意识到评估的危险。

只需从列表的字符串表示形式中切下第一个和最后一个字符,即可保存.strip()函数(请参见下面的第三行):

>>> mylist=[1,2,3,4,5,'baloney','alfalfa']
>>> strlist=str(mylist)
['1', ' 2', ' 3', ' 4', ' 5', " 'baloney'", " 'alfalfa'"]
>>> mylistfromstring=(strlist[1:-1].split(', '))
>>> mylistfromstring[3]
'4'
>>> for entry in mylistfromstring:
...     print(entry)
...     type(entry)
...
1
<class 'str'>
2
<class 'str'>
3
<class 'str'>
4
<class 'str'>
5
<class 'str'>
'baloney'
<class 'str'>
'alfalfa'
<class 'str'>