Python round list to 2 decimal places

I have a list which consists of float values but they're too detailed to proceed. I know we can shorten them by using the ("%.f" % variable) operator, like:

result = [359.70000000000005]
result = "%.2f" % result
result = [359.70]

My question is how can I turn a list of values into their rounded equivalents without using an iterator. I've tried something, but it throws a TypeError:

list = [0.30000000000000004, 0.5, 0.20000000000000001]
list = "%.2f" % list
TypeError: not all arguments converted during string formatting

How can I provide a clean list like:

list = [0.30, 0.5, 0.20]

Python round list to 2 decimal places

gandreadis

2,8472 gold badges27 silver badges37 bronze badges

asked Mar 16, 2011 at 13:37

1

"%.2f" does not return a clean float. It returns a string representing this float with two decimals.

my_list = [0.30000000000000004, 0.5, 0.20000000000000001]
my_formatted_list = [ '%.2f' % elem for elem in my_list ]

returns:

['0.30', '0.50', '0.20']

Also, don't call your variable list. This is a reserved word for list creation. Use some other name, for example my_list.

If you want to obtain [0.30, 0.5, 0.20] (or at least the floats that are the closest possible), you can try this:

my_rounded_list = [ round(elem, 2) for elem in my_list ]

returns:

[0.29999999999999999, 0.5, 0.20000000000000001]

Python round list to 2 decimal places

gandreadis

2,8472 gold badges27 silver badges37 bronze badges

answered Mar 16, 2011 at 13:39

eumiroeumiro

198k33 gold badges294 silver badges259 bronze badges

4

If you really want an iterator-free solution, you can use numpy and its array round function.

import numpy as np
myList = list(np.around(np.array(myList),2))

answered Mar 25, 2018 at 4:37

Python round list to 2 decimal places

john ktejikjohn ktejik

5,6674 gold badges48 silver badges53 bronze badges

2

You might want to look at Python's decimal module, which can make using floating point numbers and doing arithmetic with them a lot more intuitive. Here's a trivial example of one way of using it to "clean up" your list values:

>>> from decimal import *
>>> mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
>>> getcontext().prec = 2
>>> ["%.2f" % e for e in mylist]
['0.30', '0.50', '0.20']
>>> [Decimal("%.2f" % e) for e in mylist]
[Decimal('0.30'), Decimal('0.50'), Decimal('0.20')]
>>> data = [float(Decimal("%.2f" % e)) for e in mylist]
>>> data
[0.3, 0.5, 0.2]

answered Mar 16, 2011 at 14:08

Python round list to 2 decimal places

martineaumartineau

115k25 gold badges160 silver badges282 bronze badges

0

mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
myRoundedList =  [round(x,2) for x in mylist] 
# [0.3, 0.5, 0.2]

pzaenger

9,8513 gold badges39 silver badges44 bronze badges

answered Oct 21, 2018 at 17:42

Python round list to 2 decimal places

Silvia42Silvia42

811 silver badge1 bronze badge

You can use the built-in map along with a lambda expression:

my_list = [0.2111111111, 0.5, 0.3777777777]
my_list_rounded = list(map(lambda x: round(x, ndigits=2), my_list))
my_list_rounded                                                                                                                                                                                                                 
Out[3]: [0.21, 0.5, 0.38]

Alternatively you could also create a named function for the rounding up to a specific digit using partial from the functools module for working with higher order functions:

from functools import partial

my_list = [0.2111111111, 0.5, 0.3777777777]
round_2digits = partial(round, ndigits=2)
my_list_rounded = list(map(round_2digits, my_list))
my_list_rounded                                                                                                                                                                                                                 
Out[6]: [0.21, 0.5, 0.38]

answered Sep 8, 2020 at 18:22

jojojojo

9,4182 gold badges48 silver badges69 bronze badges

Another option which doesn't require numpy is:

precision = 2  
myRoundedList = [int(elem*(10**precision)+delta)/(10.0**precision) for elem in myList]

# delta=0 for floor
# delta = 0.5 for round
# delta = 1 for ceil

answered May 16, 2018 at 15:55

Python round list to 2 decimal places

Easiest way :

import numpy as np

np.round(list,2)

answered Jul 4 at 14:42

1

How do you round to 2 decimal places in Python?

Python's round() function requires two arguments. First is the number to be rounded. Second argument decides the number of decimal places to which it is rounded. To round the number to 2 decimals, give second argument as 2.

How do you round a list in Python?

Use numpy..
a_list = [1.234, 2.345, 3.45, 1.45].
np_array = np. array(a_list).
np_round_to_tenths = np. around(np_array, 1).
round_to_tenths = list(np_round_to_tenths).
print(round_to_tenths).

How do you round off values in a list?

The round function returns the number rounded to ndigits precision after the decimal point..
Use a list comprehension to iterate over the list..
On each iteration, pass the list element to the round() function..
The new list will contain rounded numbers..