Python检查列表中的所有元素是否是相同的类型
如果列表中的元素是相同类型的,python如何检查(如果可能,不单独检查每个元素)?
例如,我想有一个函数来检查这个列表中的每个元素是整数(这显然是错误的):
x=[1, 2.5, 'a']
def checkIntegers(x):
# return true if all elements are integers, false otherwise
尝试将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
>>> 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()
,不需要遍历整个列表。 只要发现不是int
或long
对象就立即中断:
>>> 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