将列表的字符串表示形式转换为 Python 中的列表
Convert string representation of list to list in Python
我有一个看起来与列表相同的字符串,比方说:
'[万福广场西,凰花苑]'
我想把它转换成这样:
['万福广场西','凰花苑']
我使用了 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>
试试
my_list = '[万福广场西,凰花苑]'[1:-1].split(",")
它会 return 你一个列表 -- ['万福广场西', '凰花苑']
您可以将其检查为 -- type(my_list) #<class 'list'>
你的字符串内容实际上不是一个有效的文字列表,因为文字缺少必要的引号,所以你不能用 eval()
或 ast.literal_eval()
解析它。
相反,您可以使用正则表达式将字符串解析为列表:
import re
print(re.findall(r'[^\[\],]+', '[万福广场西,凰花苑]'))
这输出:
['万福广场西', '凰花苑']
使用strip
和split
>>> '[万福广场西,凰花苑]'.strip('[]').split(",")
['万福广场西', '凰花苑']
eval() 会将给定的字符串视为 python 代码和 return 结果。因此,根据您的字符串,python 代码将类似于 [万福广场西,凰花苑]
,这意味着列表中有两个变量 万福广场西
和 凰花苑
。
如果你希望它被评估为一个字符串列表,你需要用 double quotes (")
绑定两个字符串,例如
'["万福广场西","凰花苑"]'
.
当您对该字符串进行 eval() 处理时,输出将是,
['万福广场西', '凰花苑']
如果您希望动态发生这种情况,您需要使用拆分和合并功能,例如,
''.join(list('[万福广场西,凰花苑]')[1:-1]).split(',')
首先生成
给出的字符串列表
list('[万福广场西,凰花苑]')[1:-1] # O/P ['万', '福', '广', '场', '西', ',', '凰', '花', '苑']
然后将所有字符串连接为
''.join(['万', '福', '广', '场', '西', ',', '凰', '花', '苑']) # O/P 万福广场西,凰花苑
并通过 comma (,)
拆分字符串以创建您想要的输出。
'万福广场西,凰花苑'.split(',') # O/P ['万福广场西', '凰花苑']
希望您找到了想要的东西。如果需要任何说明,请随时发表评论。
我有一个看起来与列表相同的字符串,比方说:
'[万福广场西,凰花苑]'
我想把它转换成这样:
['万福广场西','凰花苑']
我使用了 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>
试试
my_list = '[万福广场西,凰花苑]'[1:-1].split(",")
它会 return 你一个列表 -- ['万福广场西', '凰花苑']
您可以将其检查为 -- type(my_list) #<class 'list'>
你的字符串内容实际上不是一个有效的文字列表,因为文字缺少必要的引号,所以你不能用 eval()
或 ast.literal_eval()
解析它。
相反,您可以使用正则表达式将字符串解析为列表:
import re
print(re.findall(r'[^\[\],]+', '[万福广场西,凰花苑]'))
这输出:
['万福广场西', '凰花苑']
使用strip
和split
>>> '[万福广场西,凰花苑]'.strip('[]').split(",")
['万福广场西', '凰花苑']
eval() 会将给定的字符串视为 python 代码和 return 结果。因此,根据您的字符串,python 代码将类似于 [万福广场西,凰花苑]
,这意味着列表中有两个变量 万福广场西
和 凰花苑
。
如果你希望它被评估为一个字符串列表,你需要用 double quotes (")
绑定两个字符串,例如
'["万福广场西","凰花苑"]'
.
当您对该字符串进行 eval() 处理时,输出将是,
['万福广场西', '凰花苑']
如果您希望动态发生这种情况,您需要使用拆分和合并功能,例如,
''.join(list('[万福广场西,凰花苑]')[1:-1]).split(',')
首先生成
给出的字符串列表list('[万福广场西,凰花苑]')[1:-1] # O/P ['万', '福', '广', '场', '西', ',', '凰', '花', '苑']
然后将所有字符串连接为
''.join(['万', '福', '广', '场', '西', ',', '凰', '花', '苑']) # O/P 万福广场西,凰花苑
并通过 comma (,)
拆分字符串以创建您想要的输出。
'万福广场西,凰花苑'.split(',') # O/P ['万福广场西', '凰花苑']
希望您找到了想要的东西。如果需要任何说明,请随时发表评论。