By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
464,789 Members | 1,457 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 464,789 IT Pros & Developers. It's quick & easy.

How do I round numbers in a list?

P: 39
I want to round a list of numbers to basically remove all the decimal places or even just convert them to integers.

So this is what I've tried and I just can't get this to work.

Expand|Select|Wrap|Line Numbers
  1. myList = [10.5,25.1,350.6,4,5,6] #declare my list
  2. for i in range(len(myList)):
  3.     myList[i] == round(i,0)  #tries to round all numbers.
  4. print myList
  5.  
  6. #other Attempt
  7. for i in range(len(myList)):
  8.     myList[i] == int(i)  #tries to make i into an integer
  9. print myList
  10.  
  11. #other attempt
  12.  
  13. for i in myList:
  14.      int(i)
  15.  
  16.  
I'm just not getting this.

Thanks
Sep 12 '12 #1

✓ answered by bvdet

In your first example, you are using the comparison operator "==" when you should be using the assignment operator "=". Also, you should combine int() and round() to achieve the desired output.
Expand|Select|Wrap|Line Numbers
  1. >>> int(round(12.5, 0))
  2. 13
  3. >>> x == int(round(12.5, 0))
  4. False
  5. >>> x = int(round(12.5, 0))
  6. >>> x
  7. 13
  8. >>> 
A list comprehension is the easiest way.
Expand|Select|Wrap|Line Numbers
  1. >>> x = [1,2,3,11.5]
  2. >>> newlist = [int(round(n, 0)) for n in x]
  3. >>> newlist
  4. [1, 2, 3, 12]
  5. >>> 

Share this Question
Share on Google+
9 Replies

zmbd
Expert Mod 5K+
P: 5,397
So what error message are you getting?
So what output, if any, are you getting?
Hint: round(i,0) returns a double so if you want to round and then return the integer part only...

-z
Sep 12 '12 #2

P: 39
Okay, here's the code again:
Expand|Select|Wrap|Line Numbers
  1. myList = [10.5,25.1,350.6,4,5,6]
  2.  
  3. for i in myList:
  4.     int(i)
  5.  
  6. print myList
  7.  
  8. for i in myList:
  9.     round(i)
  10.  
  11. print myList
  12.  
  13. for i in range(len(myList)):
  14.     myList[i] == round(i,0)
  15.  
  16. print myList
  17.  
Here's my output

[10.5, 25.1, 350.6, 4, 5, 6]
[10.5, 25.1, 350.6, 4, 5, 6]
[10.5, 25.1, 350.6, 4, 5, 6]

My desirec output is
[11, 25, 351, 4, 5, 6]

No errors. Just doesn't do anything.
When you say it returns a double. clueless on what that implies.
Sep 12 '12 #3

zmbd
Expert Mod 5K+
P: 5,397
Returns a data type of "double" vs integer, long, etc..
Data types are covered in most good books and you can google on them as related to python/ruby/vba/.net etc...

My hint has the solution.

-z
Sep 12 '12 #4

P: 39
I will call you Gollum from now own, master of riddles. ;)
Okay, I understand double.
So if round is returning a double, then I need to convert that into an integer.

I've tried that (at least I think) with this code.
Expand|Select|Wrap|Line Numbers
  1. for i in myList:
  2.     int((round(i)))
  3.  
  4. print myList
But on a deeper level, is my logic right? to redefine the numbers (long) in a list by just using the for loop?
Sep 12 '12 #5

bvdet
Expert Mod 2.5K+
P: 2,851
In your first example, you are using the comparison operator "==" when you should be using the assignment operator "=". Also, you should combine int() and round() to achieve the desired output.
Expand|Select|Wrap|Line Numbers
  1. >>> int(round(12.5, 0))
  2. 13
  3. >>> x == int(round(12.5, 0))
  4. False
  5. >>> x = int(round(12.5, 0))
  6. >>> x
  7. 13
  8. >>> 
A list comprehension is the easiest way.
Expand|Select|Wrap|Line Numbers
  1. >>> x = [1,2,3,11.5]
  2. >>> newlist = [int(round(n, 0)) for n in x]
  3. >>> newlist
  4. [1, 2, 3, 12]
  5. >>> 
Sep 12 '12 #6

zmbd
Expert Mod 5K+
P: 5,397
bvdet
sigh... you let 'em off the hook. :(
-z
Sep 12 '12 #7

bvdet
Expert Mod 2.5K+
P: 2,851
Sorry about that zmbd. If he was going to "get it" he already would have.
Sep 12 '12 #8

P: 39
Well, first of all, thanks both of you. I appreciate your time.
But after looking at the way I was approaching it, I want to learn a bit more here.
I got the code to work so now my vector multiplication that I was going for is complete.

But this was my thought process.

If I put
Expand|Select|Wrap|Line Numbers
  1. int(12.5,0)
  2.  
in the command line of python, it returns 13

So that was fine with me. I get that.

But this was my thinking.
If I have a list, I can do something real basic like this

Expand|Select|Wrap|Line Numbers
  1. myList =[4,3,5,6,1]
  2.  
  3. for range in (len(myList)):
  4.      i=*3
  5.  
  6.  
That returns a new list of
12,9,15,6,1

So my thought process was, why can't I just use the round or integer function within the same statement such as

Expand|Select|Wrap|Line Numbers
  1. for range in (len(myList)):
  2.      i=int(i)
  3.  
But when I do this, it returns a number like 2.000000001 or something like that.

Anyhow, that's what I don't get so as part of my learning experience, can you help me understand what is happening? I see that round returns a double like you said, but how does that double go back to being an int?

I mean, why doesn´t the following code work?

Expand|Select|Wrap|Line Numbers
  1. for range in (len(myList)):
  2.      i=int(round(i,0))
  3.  
  4.  
thanks again
Oh, and bvdet,
I didn´t know you could use list comprehension like that.
I redid all my code and cut it down by about 25% with that new found knowledge.
Sep 12 '12 #9

bvdet
Expert Mod 2.5K+
P: 2,851
In your for loop, range is used as a temporary identifier for the expression len(myList), which returns an integer. You cannot iterate on an integer. Also, you will mask the built-in function range(). I think you meant to do this:
Expand|Select|Wrap|Line Numbers
  1. >>> myList = [10.2, 12.9]
  2. >>> for i in range(len(myList)):
  3. ...     myList[i]=int(round(myList[i],0))
  4. ...     
  5. >>> myList
  6. [10, 13]
  7. >>> 
The temporary identifier i can be used as the index for getting each list element and reassigning the element at that index. Identifier i will retain the last value assigned to it. Built-in function range() returns a list.
Expand|Select|Wrap|Line Numbers
  1. >>> range(len(myList))
  2. [0, 1]
  3. >>> i
  4. 1
  5. >>> 
HTH
Sep 12 '12 #10

Post your reply

Sign in to post your reply or Sign up for a free account.