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]

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]

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

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

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

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

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..

Chủ Đề