Ispirato da alcune delle risposte di cui sopra che funzionano con i pacchetti python di base ho confrontato le prestazioni di alcuni (usando Python 3.7.3):
Metodo 1: ast
import ast
list(map(str.strip, ast.literal_eval(u'[ "A","B","C" , " D"]')))
# ['A', 'B', 'C', 'D']
import timeit
timeit.timeit(stmt="list(map(str.strip, ast.literal_eval(u'[ \"A\",\"B\",\"C\" , \" D\"]')))", setup='import ast', number=100000)
# 1.292875313000195
Metodo 2: json
import json
list(map(str.strip, json.loads(u'[ "A","B","C" , " D"]')))
# ['A', 'B', 'C', 'D']
import timeit
timeit.timeit(stmt="list(map(str.strip, json.loads(u'[ \"A\",\"B\",\"C\" , \" D\"]')))", setup='import json', number=100000)
# 0.27833264000014424
Metodo 3: nessuna importazione
list(map(str.strip, u'[ "A","B","C" , " D"]'.strip('][').replace('"', '').split(',')))
# ['A', 'B', 'C', 'D']
import timeit
timeit.timeit(stmt="list(map(str.strip, u'[ \"A\",\"B\",\"C\" , \" D\"]'.strip('][').replace('\"', '').split(',')))", number=100000)
# 0.12935059100027502
Sono rimasto deluso nel vedere quello che ho considerato il metodo con la peggiore leggibilità era il metodo con le migliori prestazioni ... ci sono dei compromessi da considerare quando si va con l'opzione più leggibile ... per il tipo di carichi di lavoro che uso python per me di solito leggibilità del valore su un'opzione leggermente più performante, ma come al solito dipende.