Siyah - 7 months ago 48

Python Question

I have Googled, but couldn't find a proper answer to this.

Let's say we have floats and we get their averages. Their averages are like this:

`3.5`

2.5

5

7

So we've got 4 numbers

What I want to do is, to print these numbers and keep them like this. My problem is, though, that when I use

`%.1f`

So I'd like to print them exactly as they are, but I don't know how. Float adds

`decimal`

`int`

Both options are not what I want.

Can someone point me in the right direction?

`# I have a list of numbers and I am calculating their average and rounding them first.`

get_numbers = map(float, line[-1])

average_numbers = sum(get_numbers) / len(get_numbers)

rounded_numbers= round(average_numbers * 2) / 2

# So now, I've got the numbers: 3.5, 2.5, 5, 7

print "The numbers are: %.1f" % (rounded_numbers)

Answer

You can use floats' is_integer method. It returns `True`

if a float can be represented as an integer (in other words, if it is of the form `X.0`

):

```
li = [3.5, 2.5, 5.0, 7.0]
print([int(num) if float(num).is_integer() else num for num in li])
>> [3.5, 2.5, 5, 7]
```

**EDIT**

After OP added their code:

Instead of using list comprehension like in my original example above, you should use the same logic with your calculated average:

```
get_numbers = map(float, line[-1]) # assuming line[-1] is a list of numbers
average_numbers = sum(get_numbers) / len(get_numbers)
average = round(average_numbers * 2) / 2
average = int(average) if float(average).is_integer() else average
print average # this for example will print 3 if the average is 3.0 or
# the actual float representation.
```

Source (Stackoverflow)