开发者

Filter a list in python get integers

I have a list:

['Jack', 18, 'IM-101', 99.9]

How do I filter it to get only the integers from it??

I tried

map(int, x)

but it gives error.

开发者_如何转开发ValueError: invalid literal for int()
  with base 10: 'Jack'


>>> x = ['Jack', 18, 'IM-101', 99.9]
>>> [e for e in x if isinstance(e, int)]
[18]


In case the list contains integers that are formatted as str, the isinstance() solutions would not work.

['Jack', '18', 'IM-101', '99.9']

I figured out the following alternative solution for that case:

list_of_numbers = []
for el in your_list:
    try:
        list_of_numbers.append(int(el))
    except ValueError:
        pass

You can find more details about this solution in this post, containing a similar question.


Use filter:

filter(lambda e: isinstance(e, int), x)


Use list comprehension

>>> t = ['Jack', 18, 'IM-101', 99.9]
>>> [x for x in t if type(x) == type(1)]
[18]
>>> 

map(int, x) throws an error

map function applies int(t) on every element of x.

This throws an error because int('Jack') will throw an error.

[Edit:]

Also isinstance is purer way of checking that it is of type integer, as sukhbir says.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜