在Python中将'[a, b, c]'形式的字符串转换为列表,且不使用列表推导式
Python初学者的问题:
有没有办法把形如 '[a, b, c]'
的字符串直接转换成一个列表?
也就是说,像这样 type(f('[a, b, c]')) 是 list == True
或者 isinstance(f('[a, b, c]'), list) 是 True
,对于某个方法或函数 f
来说?请注意,最终的列表应该是每个元素都是单独的字符串,也就是 f('[a, b, c]') 返回 ['a', 'b', 'c']
。
我查过 这个 和 这个。 ast.literal_eval()
出现错误:
ValueError: malformed string
我的输入列表(字符串)没有unicode标记,里面的项目也不是单独的 string
或 int
。
有没有内置的方法可以进行这种转换?这基本上是一个“形式”问题。我想知道有没有一种“Pythonic”的方式来做到这一点,而不需要写一个比较长的函数来分割字符串和转换。
任何见解都将非常感谢。
5 个回答
0
是的,有一种方法可以直接把字符串 "[a,b,c]" 转换成一个列表:
a="hello"
b=" "
c="world"
lststr = "[a,b,c]"
# now 'exec()' can be used for declaring a variable
# and assigning string 'lststr' to it as a list variable
exec("lstvar = "+lststr)
0
使用 literal_eval
这个方法可以让整数保持为整数,并且保留子列表。
In [7]: import re
In [8]: d='[a, b, c, 4, 5, 6,[1,4]]'
In [9]: from ast import literal_eval
In [10]: lit = literal_eval(re.sub('([A-Za-z])', r'"\1"', d))
In [11]: lit[6]
Out[11]: [1, 4]
In [12]: type(lit[6])
Out[12]: list
In [13]: lit
Out[13]: ['a', 'b', 'c', 4, 5, 6, [1, 4]]
如果你想把数字和字母混合在一起,你需要把所有的整数也转换成字符串。
你还可以在模式中添加内容,以找到包含 @
和 .
的字符串:
In [16]: d='[a, ba, c, 4, 5, 6,[1,4],me@you.com]'
In [17]: lit = literal_eval(re.sub('([A-Za-z@.])', r'"\1"', d))
In [18]: lit
Out[18]: ['a', 'ba', 'c', 4, 5, 6, [1, 4], 'me@you.com']
0
这样就可以了:
s = '[a, b, c]'
s = s[1:-1]
s = s.split(', ')
或者你也可以用一行代码来实现:
s = s[1:-1].split(', ')
1
我知道提问者明确要求不要使用列表推导式的解决方案,不过为了那些可能对使用列表推导式的解决方案感兴趣的人,我在这里提供这段代码:
>>> s = "[a, 1, b]"
>>> s = [int(i) if i.strip().isdigit() else i.strip() for i in s[1:-1].split(",")]
>>> print(s)
['a', 1, 'b']
这段代码还考虑了元素的类型,整数会被转换成 int
类型。
2
试试这个:
s = '[a ,b, c]'
s = s.replace(" ", "")
l = s[1:-1].split(',')