Steven C. Howell - 2 months ago 19

Python Question

In Python, how could you check if the type of a number is an integer without checking each integer type, i.e.,

`'int'`

`'numpy.int32'`

`'numpy.int64'`

I thought to try

`if int(val) == val`

`In [1]: vals = [3, np.ones(1, dtype=np.int32)[0], np.zeros(1, dtype=np.int64)[0], np.ones(1)[0]]`

In [2]: for val in vals:

...: print(type(val))

...: if int(val) == val:

...: print('{} is an int'.format(val))

<class 'int'>

3 is an int

<class 'numpy.int32'>

1 is an int

<class 'numpy.int64'>

0 is an int

<class 'numpy.float64'>

1.0 is an int

I want to filter out the last value, which is a

`numpy.float64`

Answer

You can use `isinstance`

with a tuple argument with the types of interest:

```
>>> [(e, type(e), isinstance(e, (int, np.integer))) for e in vals]
[(3, <type 'int'>, True),
(1, <type 'numpy.int32'>, True),
(0, <type 'numpy.int64'>, True),
(1.0, <type 'numpy.float64'>, False)]
```

Find only int and int64:

```
>>> [(e, type(e), isinstance(e, (int, np.int64))) for e in vals]
[(3, <type 'int'>, True), (1, <type 'numpy.int32'>, False), (0, <type 'numpy.int64'>, True), (1.0, <type 'numpy.float64'>, False)]
```