小编典典

Python:从混合列表中提取整数

python

(python 2.7.8)

我正在尝试使函数从混合列表中提取整数。混合列表可以是任何东西,但是我要使用的是:

testList = [1, 4.66, 7, "abc", 5, True, 3.2, False, "Hello", 7]

我以为这很简单,所以写道:

def parseIntegers(mixedList):
    newList = [i for i in mixedList if isinstance(i, int)]
    return newList

问题是它创建的newList具有布尔值和整数,这意味着它使我得到了:

[1, 7, 5, True, False, 7]

这是为什么?我还使用了循环(对于mixedList中的i:if isinstace .....),但是它本质上是相同的(?),并且存在相同的问题。


阅读 296

收藏
2021-01-20

共1个答案

小编典典

最好的方法不是使用type,而是使用一系列isinstance调用。使用的陷阱typeint将来有人可以继承子类,然后您的代码将无法工作。另外,由于您使用的是Python
2.x,因此需要考虑大于或等于2 ^ 31的数字:这些不是整数。您需要考虑以下long类型:

def parseIntegers(mixedList):
    return [x for x in testList if (isinstance(x, int) or isinstance(x, long)) and not isinstance(x, bool)]

需要考虑的原因long

>>> a = 2 ** 31
>>> isinstance(a, int)
False
2021-01-20