Python检查列表中的所有元素是否是相同的类型

如果列表中的元素是相同类型的,python如何检查(如果可能,不单独检查每个元素)?

例如,我想有一个函数来检查这个列表中的每个元素是整数(这显然是错误的):

x=[1, 2.5, 'a']

def checkIntegers(x):
    # return true if all elements are integers, false otherwise

尝试将allisinstance结合使用:

all(isinstance(x, int) for x in lst)

如果需要的话,您甚至可以使用isinstance检查多种类型:

all(isinstance(x, (int, long)) for x in lst)

并不是说这样也会选择继承类。 例如:

class MyInt(int):
     pass

print(isinstance(MyInt('3'),int)) #True

如果你需要限制自己只是整数,你可以使用all(type(x) is int for x in 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


>>> def checkInt(l):
    return all(isinstance(i, (int, long)) for i in l)

>>> checkInt([1,2,3])
True
>>> checkInt(['a',1,2,3])
False
>>> checkInt([1,2,3,238762384762364892364])
True

使用any() ,不需要遍历整个列表。 只要发现不是intlong对象就立即中断:

>>> not any(not isinstance(y,(int,long)) for y in [1,2,3])
True
>>> not any(not isinstance(y,(int,long)) for y in [1,'a',2,3])
False
链接地址: http://www.djcxy.com/p/54233.html

上一篇: Python check if all elements of a list are the same type

下一篇: check if variable is dataframe