小编典典

检查列表中的所有元素是否都属于同一类型

python

如何检查列表中的元素是否属于同一类型,而又尽可能不检查每个元素?

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

x = [1, 2.5, 'a']

def checkIntegers(x):
    # return True if all elements are integers, False otherwise

阅读 219

收藏
2020-12-20

共1个答案

小编典典

尝试all与结合使用isinstance

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

2020-12-20