Utilizzare from __future__ import division
per ottenere il comportamento desiderato. Poi, in un pizzico, si può fare qualcosa di simile
from __future__ import division
strings = ["0.1234", "1/2", "2/3"]
numbers = map(eval, strings)
per ottenere un elenco di carri fuori delle corde. Se si vuole fare questo nel modo "giusto", non usare eval()
, ma invece scrivere una funzione che accetta una stringa e chiama float()
se non contiene alcuna barra, o analizza la stringa e divide il numeratore e il denominatore se c'è un taglio in esso.
Un modo per farlo:
def parse_float_string(x)
parts = x.split('/', 1)
if len(parts) == 1:
return float(x)
elif len(parts) == 2:
return float(parts[0])/float(parts[1])
else:
raise ValueError
Poi basta map(parse_float_string, strings)
ti porterà la vostra lista.
+1. eval è completamente inutile in questo caso, e sono contento che qualcuno (oltre a me, ovviamente) si sia difeso per quello che è giusto. –
Eval non è un rischio per la sicurezza a meno che i tuoi collaboratori non siano sociopatici dannosi. In questo caso non ne hai bisogno, ma non è più un rischio per la sicurezza che il codice open source stesso. –
Molto buono. La stringa proviene davvero dall'esterno, quindi ho bisogno di andare al sicuro (e cercare di non imparare cattive abitudini). Speravo di non aver bisogno di analizzarlo, ma questo non è male e funziona come un fascino. – ketorin