Convert a list of float to string in Python
Question:
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
Answers:
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).
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.
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.
If you want to keep full precision, the syntactically simplest/clearest way seems to be
mylist = list(map(str, mylist))
str([round(i, 2) for i in mylist])
Using numpy you may do:
np.array2string(np.asarray(mylist), precision=2, separator=', ')
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
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).
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.
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.
If you want to keep full precision, the syntactically simplest/clearest way seems to be
mylist = list(map(str, mylist))
str([round(i, 2) for i in mylist])
Using numpy you may do:
np.array2string(np.asarray(mylist), precision=2, separator=', ')