在Python中筛选列表,获取整数

13
我有一个列表:
['Jack', 18, 'IM-101', 99.9]

如何筛选得到整数?

我试过:

map(int, x)

但它会报错。

ValueError: invalid literal for int()
  with base 10: 'Jack'
4个回答

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

6

如果列表中包含格式为 str 的整数,那么 isinstance() 解决方案将无法起作用。

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

我为该情况想出了以下替代解决方案:
list_of_numbers = []
for el in your_list:
    try:
        list_of_numbers.append(int(el))
    except ValueError:
        pass

您可以在此帖子中找到更多关于这个解决方案的细节,该帖子包含一个类似的问题。


5
使用 filter 函数:
filter(lambda e: isinstance(e, int), x)

4
使用列表推导式
>>> t = ['Jack', 18, 'IM-101', 99.9]
>>> [x for x in t if type(x) == type(1)]
[18]
>>> 

map(int, x) 抛出错误

map函数将int(t)应用于x的每个元素。

这会抛出一个错误,因为int('Jack')会抛出一个错误。

[编辑:]

另外,使用isinstance检查它是否为整数类型是更纯粹的方式,正如sukhbir所说。


有人可能会认为使用 isinstance 比将 type 进行比较更加明确。在我看来,这是一个平衡点。 - Karl Knechtel
@Karl Knechtel:没问题。你是对的。我只是想告诉大家列表推导式是做这件事的方法,并向他展示为什么使用map会抛出错误。 - pyfunc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接