5

Ho una lista di carri in Python e quando si converte in una stringa, ho la follwoingpitone convertire un elenco di float a stringa

[1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001] 

Questi galleggianti sono dotati di 2 cifre dopo la virgola quando ho li ha creati (credo di sì),

Poi ho usato

str(mylist) 

Come posso ottenere una stringa con 2 cifre dopo la virgola?

======================

Lasciatemi essere più preciso:

voglio ottenere qualcosa di simile "[1.883,95, 1878.33, 1869.43, 1863.40] "

Ho bisogno di un'operazione di stringa in seguito. Ad esempio + = "! \ T!"

Voglio che il risultato finale sia una stringa e voglio mantenere i separatori.

Naturalmente sappiamo tutti come farlo in un ciclo, ma si spera che qualcuno possa trovare un modo elegante e intelligente &.

ispirato dal @senshin il seguente codice funziona per esempio, ma penso che ci sia un modo migliore

msg = "[" 
for x in mylist: 
    msg += '{:.2f}'.format(x)+',' 
msg = msg[0:len(msg)-1] 
msg+="]" 
print msg 

Grazie!

risposta

9

Utilizzare la formattazione della stringa per ottenere il numero desiderato di posizioni decimali.

>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001] 
>>> ['{:.2f}'.format(x) for x in nums] 
['1883.95', '1878.33', '1869.43', '1863.40'] 

La stringa di formato {:.2f} significa "stampare un numero a virgola fissa (f) con due cifre dopo il punto decimale (.2)". str.format arrotonderà automaticamente il numero correttamente (supponendo che abbiate inserito i numeri con due cifre decimali al primo posto, nel qual caso l'errore a virgola mobile non sarà sufficiente a rovinare l'arrotondamento).

+0

che funziona, ho avuto [ '1883,95', '1878,33', '1869,43', '1863,40'] tuttavia, posso ottenere qualcosa di simile "[1883,95 1878.33, 1869.43, 1863.40] "Dopo ho bisogno di qualche operazione con le stringhe. Grazie! – Niebieski

+0

@Niebieski Vuoi una rappresentazione di stringa dell'intera lista? Dubito molto che sia ciò che vuoi _icamente, ma puoi semplicemente chiamare' str ("sulla lista per ottenere qualcosa da vicino – senshin

+0

Voglio fare + ="! \ t! ", o operazione simile – Niebieski

1
map(lambda n: '%.2f'%n, [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]) 

map() invoca il richiamabile passata nel primo argomento di ogni elemento della lista/iterabile passata come secondo argomento.

+1

Per favore includi una spiegazione nella tua risposta Le risposte solo per codice aiutano raramente le persone a imparare, che è (idealmente) quello che siamo qui per fare – BradleyDotNET

+0

@Bradley Fatto! Felice? :) Alt Non sono completamente d'accordo sul fatto che «gli esempi di solo codice raramente aiutano le persone a imparare». –

0

Sbarazzarsi dei 'marchi:

>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001] 
>>> '[{:s}]'.format(', '.join(['{:.2f}'.format(x) for x in nums])) 
'[1883.95, 1878.33, 1869.43, 1863.40]' 
  • [' {: .2f}.' Formato (x) per x in nums] fa una lista di stringhe, come nel accettata risposta.
  • ',' .join ([list]) restituisce una stringa con ',' inserito tra gli elementi dell'elenco.
  • '[{: s}]'. Format (join_string) aggiunge le parentesi.
Problemi correlati