Convert a list of float to string in Python
Asked Answered
T

6

13

I have a list of floats in Python and when I convert it into a string, I get the following

[1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]

These floats have 2 digits after the decimal point when I created them (I believe so),

Then I used

str(mylist)

How do I get a string with 2 digits after the decimal point?

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

Let me be more specific, I want the end result to be a string and I want to keep the separators:

"[1883.95, 1878.33, 1869.43, 1863.40]"

I need to do some string operations afterwards. For example +="!\t!".

Inspired by @senshin the following code works for example, but I think there is a better way

msg = "["

for x in mylist:
    msg += '{:.2f}'.format(x)+','

msg = msg[0:len(msg)-1]
msg+="]"
print msg
Thanks answered 1/5, 2014 at 23:49 Comment(0)
B
16

Use string formatting to get the desired number of decimal places.

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

The format string {:.2f} means "print a fixed-point number (f) with two places after the decimal point (.2)". str.format will automatically round the number correctly (assuming you entered the numbers with two decimal places in the first place, in which case the floating-point error won't be enough to mess with the rounding).

Broadus answered 1/5, 2014 at 23:52 Comment(5)
That works, I got ['1883.95', '1878.33', '1869.43', '1863.40'] however, can I get something like "[1883.95, 1878.33, 1869.43, 1863.40]"? I need to some string operation afterwards. Thanks!Thanks
@Thanks You want a string representation of the whole list? I very much doubt that that's what you actually want, but you can just call str() on the list to get something close.Broadus
I want to do += "!\t!", or similar operationThanks
@Thanks But why do you want to do that? Why wouldn't you just perform string operations on the individual numbers?Broadus
I am generating an email summary of this list, so I need the end result to be a string and I want to keep the separators. I am looking for an elegant way to do so. I thought str(mylist) would do it but it gives that annoying additional digitsThanks
C
4

If you want to keep full precision, the syntactically simplest/clearest way seems to be

mylist = list(map(str, mylist))
Caesium answered 1/10, 2020 at 11:56 Comment(0)
C
3
map(lambda n: '%.2f'%n, [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001])

map() invokes the callable passed in the first argument for each element in the list/iterable passed as the second argument.

Canaster answered 1/5, 2014 at 23:53 Comment(0)
S
2

Get rid of the ' marks:

>>> 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}'.format(x) for x in nums] makes a list of strings, as in the accepted answer.
  • ', '.join([list]) returns one string with ', ' inserted between the list elements.
  • '[{:s}]'.format(joined_string) adds the brackets.
Serigraph answered 15/8, 2017 at 13:29 Comment(0)
P
1
str([round(i, 2) for i in mylist])
Prostrate answered 26/7, 2022 at 8:43 Comment(0)
V
1

Using numpy you may do:

np.array2string(np.asarray(mylist), precision=2, separator=', ')

Vitality answered 22/2, 2023 at 20:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.