在python中将字符串转换为数组

use*_*339 0 python list

如果你有字符串"'a','b'"- >因为list("'a','b'")它被转换为["'", 'a', "'", ',', "'", 'b', "'"]但我希望它像:['a', 'b']

例如:

a = 'a','b' -> list(a) -> ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

mik*_*iku 7

您可以替换然后拆分,:

>>> "'a','b'".replace("'", "").split(",")
['a', 'b']
Run Code Online (Sandbox Code Playgroud)

或者使用正则表达式:

>>> import re
>>> re.findall(r"\w", "'a','b'")
['a', 'b']
Run Code Online (Sandbox Code Playgroud)

或使用评估:

>>> import ast
>>> list(ast.literal_eval("'a','b'"))
['a', 'b']
Run Code Online (Sandbox Code Playgroud)

这真的取决于你的用例.你也可以使用CSV模块,正如@abarnert建议的那样:

>>> import csv
>>> import io
>>> next(csv.reader(io.StringIO(u"'a','b'"), quotechar="'"))
['a', 'b']
Run Code Online (Sandbox Code Playgroud)

(需要注意的是什么工作时,最好也取决于你的字符串和列表的大小 - 我不能链接到的意见,但请阅读以下@ abarnert的评论,从而更好的印象.)


一些基准:

>>> from timeit import timeit

>>> def crude(): "'a','b'".replace("'", "").split(",")
>>> def regex(): re.findall(r"\w", "'a','b'")
>>> def _eval(): list(ast.literal_eval("'a','b'")) 
>>> def csvio(): next(csv.reader(io.StringIO(u"'a','b'"), quotechar="'"))

>>> timeit(crude)
1.2010400295257568

>>> timeit(regex)
2.745753049850464

>>> timeit(_eval)
17.016868114471436

>>> timeit(csvio)
3.7680318355560303
Run Code Online (Sandbox Code Playgroud)

  • @abarnert,是的还有更多的解决方案,但最好的还是取决于OP的用例.感谢您的提示:添加了您的CSV方法.改名为'eval`. (2认同)