0

如果您将字符串"'a','b'"-> 作为 alist("'a','b'")它转换为["'", 'a', "'", ',', "'", 'b', "'"]但是我希望它是这样的:['a', 'b']

例如:

a = 'a','b' -> list(a) -> ['a', 'b']
4

2 回答 2

7

您可以替换然后拆分,

>>> "'a','b'".replace("'", "").split(",")
['a', 'b']

或者使用正则表达式:

>>> import re
>>> re.findall(r"\w", "'a','b'")
['a', 'b']

或使用评估

>>> import ast
>>> list(ast.literal_eval("'a','b'"))
['a', 'b']

这实际上取决于您的用例。正如@abarnert 建议的那样,您还可以使用 CSV 模块:

>>> 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
于 2013-01-08T10:24:42.570 回答
-3

或者也许只是这个:-

print eval("'a', 'b'")

这打印: -

('a', 'b')
于 2013-01-08T10:27:53.400 回答