mam ciąg jak to "['first', 'sec', 'third']"
Python ciąg do listy najlepszych praktyk
Jaki byłby najlepszy sposób przekonwertować to do listy ciągów tj. ['first', 'sec', 'third']
mam ciąg jak to "['first', 'sec', 'third']"
Python ciąg do listy najlepszych praktyk
Jaki byłby najlepszy sposób przekonwertować to do listy ciągów tj. ['first', 'sec', 'third']
użyję literal_eval()
, że to bezpieczne:
Bezpiecznie ocenić węzeł wyrażenie lub łańcuch zawierający wyrażenie Python . Dostarczony ciąg lub węzeł może składać się tylko z następujących po literalnych strukturach Python: łańcuchów, liczb, krotek, list, znaków, wartości logicznych i Brak.
Można to wykorzystać do bezpiecznego oceniania ciągów zawierających wyrażenia Python z niezaufanych źródeł bez konieczności analizowania wartości .
>>> import ast
>>> ast.literal_eval("['first', 'sec', 'third']")
['first', 'sec', 'third']
To nie ma nic oprócz eval dosłownych wyrażeń:
>>> ast.literal_eval('"hello".upper()')
...
ValueError: malformed string
>>> ast.literal_eval('"hello"+" world"')
...
ValueError: malformed string
Dzięki alecxe, używałem tego, ale jestem ciekawy, co ludzie myślą, inne metody itp. – Ruth
+1 - To jest najlepszy sposób, aby to zrobić, ponieważ 'ast.literal_eval()' jest bezpieczny, w przeciwieństwie do do 'eval()'. To powiedziawszy, najlepszą opcją jest prawdopodobnie przechowywanie danych w bardziej znormalizowanym formacie, jeśli to możliwe. –
Jeśli
że oni zawsze sformatowane jak mówisz
wszystkie ciągi podane są w taki sam sposób, prosty podział powinien to również zrobić:
"['first', 'sec', 'third']".split("'")[1::2]
To rozwiązanie jest o wiele bardziej kruche, ponieważ będzie obsługiwać tylko pojedyncze quo styl.
Jest to jednak znacznie szybsze.
%timeit "['first', 'sec', 'third']".split("'")[1::2]
1000000 loops, best of 3: 726 ns per loop
%timeit ast.literal_eval("['first', 'sec', 'third']")
10000 loops, best of 3: 21.8 us per loop
Fajnie, ale co jeśli lista była "" ["pierwsza", "sekunda", "trzecia", \ "czwarta \"] "" lub nawet "L =" "" ["pierwsza", "sekunda", " third ', "fourth"] "" " – TerryA
Dobre przykłady. Pozwolę na odpowiedź na żywo, mam nadzieję, że pomoże to wskazać, dlaczego literal_eval jest lepszą praktyką. –
Najlepszym sposobem byłoby użycie znanego formatu serializacji, takiego jak json. –