【发布时间】:2014-11-04 08:31:21
【问题描述】:
(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]
这是为什么呢?我也用过for循环(for i in mixedList: if isinstace.....),但本质上是一样的(?),也有同样的问题。
【问题讨论】:
-
改用
type(i) == int。 -
小心使用
type- 这打破了多态性的概念:如果有人继承int,你的代码将不再工作。 -
@Smashery 看来他们不想在这种情况下包含子类。
-
可能是这样 - 但如果您试图规避面向对象语言的关键特性(多态性),您最好知道自己在做什么。也许使用
type是正确的做法。只是要小心。 -
@Smashery 这里的问题是
bool是int的一个子类并且它是不需要的,所以打破isinstance准则并使用type是在这种情况下是正确的。
标签: python