尝试使用
all与
isinstance:
all(isinstance(x, int) for x in lst)
如果有需要,你甚至可以检查多种类型:
all(isinstance(x, (int, long)) for x in lst)
不是这样也会接受继承的课程.例如.:
class MyInt(int):
pass
print(isinstance(MyInt('3'),int)) #True
如果你需要限制自己只是整数,你可以使用所有(type(x)是int为x在lst).但这是一个非常罕见的情况.
如果所有其他元素都是相同的类型,那么可以使用这个函数编写一个有趣的函数,它将返回序列中第一个元素的类型:
def homogeneous_type(seq):
iseq = iter(seq)
first_type = type(next(iseq))
return first_type if all( (type(x) is first_type) for x in iseq ) else False
这将适用于任意任意迭代,但它将在该过程中消耗“迭代器”.
另一个有趣的功能在同一静脉中,返回一套共同的基础:
import inspect
def common_bases(seq):
iseq = iter(seq)
bases = set(inspect.getmro(type(next(iseq))))
for item in iseq:
bases = bases.intersection(inspect.getmro(type(item)))
if not bases:
break
return bases