The most Pythonic way to convert a list of floats `fs`

to a list of integers is to use the one-liner `fs = [int(x) for x in fs]`

. It iterates over all elements in the list `fs`

using list comprehension and converts each list element `x`

to an integer value using the `int(x)`

constructor.

This article shows you the simplest ways to **convert a one-dimensional list consisting only of floats to a list of int**.

**Problem**: Given a list of floats `[1.0, 2.0, 3.0]`

. How to convert it to a list of ints `[1, 2, 3]`

?

The methods are not applicable to lists of lists, they contain rounding errors that are different in each method. If necessary, you can add cycles or define custom functions to check, account for and minimize errors.

## Method 1: List Comprehension

Suppose we have a list:

a = [1.1, 1.2, 1.8, 0.5, 5.9, -2.3]

Now, check the type of the list numbers:

print(type(a[0])) # <class 'float'>

Let’s apply the built-in function * int*, and get a list of integers:

print([int(a) for a in a]) # [1, 1, 1, 0, 5, -2]

Check the type of numbers in the new list:

A = [int(a) for a in a] print(type(A[0])) # <class ‘int’>

Thus, using the built-in function * int*, which converts a real number rounds towards zero, or rather, it discards the fractional part, we can get a new list of integers with a one-line code.

## Method 2: Map Function

The built-in function `map`

is well optimized and efficient, when it is called, the elements of the list are retrieved upon access. Therefore, one element is stored and processed in memory, which allows the program not to store the entire list of elements in the system memory.

Apply to the same list `a`

the following code:

print(list(map(int, a))) # [1, 1, 1, 0, 5, -2]

It makes no sense to check the type of the elements of the resulting list, since when we called the `map`

function, we passed the `int`

function already described in method 1 as an argument, and wrapped the result in a list using the `list`

function.

The quality of this transformation of the list, or rather the rounding error, is the same as in the first method.

## Method 3: Round & List Comprehension

It is very similar to the first, but unlike `int`

, it doesn’t just discard the fractional part but rounds to the nearest even integer if the fractional part is 0.5. You can also pass as the second argument the number of decimal places to which rounding is required, by default it is 0, this is what we will use:

print([round(a) for a in a])

Check the type of numbers in the new list:

D = [round(a) for a in a] print(type(D[0])) # <class ‘int’>

As you can see from this example, there are different built-in functions to achieve our goal, the difference is in the method and the magnitude of the rounding error.

## Method 4: Math Module

In this way, I suggest using the imported module `math`

, in which we will use the three functions `ceil()`

, `floor()`

, and `trunc()`

. let’s take a closer look at each. They have the same syntax, the difference is in the way of rounding.

Let’s apply to the original list:

a = [1.1, 1.2, 1.8, 0.5, 5.9, -2.3] print([math.ceil(a) for a in a]) # [2, 2, 2, 1, 6, -2]

‘Ceil’ rounds to the next largest integer, respecting the sign(** -2.3 < -2 which is True**).

Check the type of numbers in the new list:

C = [math.ceil(a) for a in a] print(type(C[0])) # <class ‘int’>

Consider the following function in the ‘math’ – ‘floor’ module, which is the opposite of ‘ceil’ – rounding down to the nearest integer:

print([math.floor(a) for a in a]) # [1, 1, 1, 0, 5, -3]

Check the type:

F = [math.floor(a) for a in a] print(type(F[0])) # <class ‘int’>

The next function, `trunc()`

, is analogous to the built-in function `int()`

— it simply discards the fractional part whatever it is:

print([math.trunc(a) for a in a]) # [1, 1, 1, 0, 5, -2]

And check the type:

T = [math.trunc(a) for a in a] print(type(T[0])) # <class ‘int’>

## Method 5: NumPy

Here’s a look at converting a list from an `int`

to an array using the NumPy module. The difference between an array and a list is that all elements of an array must be of the same type, like “float” and “int”. Numeric operations with large amounts of data can be performed with arrays much faster and more efficiently than with lists.

Let’s turn our first list `a`

into an array:

import numpy as np N = np.array(a, int)

We pass two arguments to the array function, the name of the list to convert to an array and the type for each element.

# [ 1 1 1 0 5 -2]

Сheck the type of elements:

print(type(N[0])) # <class 'numpy.int32'>

Unlike the `int`

number type in Python, the NumPy module defines them slightly differently and is divided into several subgroups. For example, `'int32'`

are integers ranging from -2147483648 to 2147483647 (4-byte numbers), `'int64'`

are numbers from -9223372036854775808 to 9223372036854775807 (8-byte numbers), there are also different types of `'int'`

for 32- and 64-bit operating systems, this must be taken into account when calculating with arrays.