0

あなたが文字列"'a','b'"->を持っているなら、list("'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 に答える