如果你有字符串"'a','b'"
- >作为list("'a','b'")
,它会转换为["'", 'a', "'", ',', "'", 'b', "'"]
,但我希望它像:['a', 'b']
例如:
a = 'a','b' -> list(a) -> ['a', 'b']
答案 0 :(得分:7)
您可以替换然后拆分,
:
>>> "'a','b'".replace("'", "").split(",")
['a', 'b']
或者使用正则表达式:
>>> import re
>>> re.findall(r"\w", "'a','b'")
['a', 'b']
或使用evaluation:
>>> import ast
>>> list(ast.literal_eval("'a','b'"))
['a', 'b']
这实际上取决于您的用例。您也可以使用CSV模块,如@abarnert建议的那样:
>>> import csv
>>> import io
>>> next(csv.reader(io.StringIO(u"'a','b'"), quotechar="'"))
['a', 'b']
(请注意,最佳效果还取决于字符串和列表的大小 - 我无法链接到评论,但请阅读下面的@ 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
答案 1 :(得分:-3)
或许只是这个: -
print eval("'a', 'b'")
打印: -
('a', 'b')