我有一个看起来与列表相同的字符串,比如说:
'[万福广场西,凰花苑]'
我想将其转换为如下形式:
['万福广场西','凰花苑']
我使用了eval()
和ast.literal_eval()
,但出现以下错误:
y=eval('[万福广场西,凰花苑]')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-117-0aadbead218c> in <module>()
----> 1 y=eval('[万福广场西,凰花苑]')
<string> in <module>()
NameError: name '万福广场西' is not defined
使用ast.literal_eval()
时,出现此错误ValueError: malformed node or string: <_ast.Name object at 0x000002A67FFA5CC0>
答案 0 :(得分:2)
尝试
my_list = '[万福广场西,凰花苑]'[1:-1].split(",")
它将返回一个列表-['万福广场西', '凰花苑']
您可以将其检查为-type(my_list) #<class 'list'>
答案 1 :(得分:2)
使用strip
和split
>>> '[万福广场西,凰花苑]'.strip('[]').split(",")
['万福广场西', '凰花苑']
答案 2 :(得分:1)
字符串的内容实际上不是有效的文字列表,因为文字缺少必要的引号,因此您无法使用eval()
或ast.literal_eval()
来解析它。
相反,您可以使用正则表达式将字符串解析为列表:
import re
print(re.findall(r'[^\[\],]+', '[万福广场西,凰花苑]'))
这将输出:
['万福广场西', '凰花苑']
答案 3 :(得分:1)
eval()会将给定的字符串视为python代码并返回结果。因此,按照您的字符串,python代码将类似于[万福广场西,凰花苑]
,这意味着列表中有两个变量万福广场西
和凰花苑
。
如果要将其作为字符串列表进行评估,则需要将两个字符串都用double quotes (")
绑定,例如
'["万福广场西","凰花苑"]'
。
将此字符串作为eval()的对象时,输出为
['万福广场西', '凰花苑']
如果您希望动态地进行此操作,则需要使用split和join函数,如
''.join(list('[万福广场西,凰花苑]')[1:-1]).split(',')
首先创建
给出的字符串列表list('[万福广场西,凰花苑]')[1:-1] # O/P ['万', '福', '广', '场', '西', ',', '凰', '花', '苑']
然后将所有字符串连接为
''.join(['万', '福', '广', '场', '西', ',', '凰', '花', '苑']) # O/P 万福广场西,凰花苑
并将字符串除以comma (,)
来创建所需的输出。
'万福广场西,凰花苑'.split(',') # O/P ['万福广场西', '凰花苑']
希望您有想要的东西。如有必要,请随时发表评论。