测试元素python元组/列表的类型

时间:2012-01-22 19:59:01

标签: python

如何验证列表或元组中所有元素的类型是否相同且属于某种类型?

例如:

(1, 2, 3)  # test for all int = True
(1, 3, 'a') # test for all int = False

4 个答案:

答案 0 :(得分:38)

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

演示:

In [3]: lst = (1,2,3)

In [4]: all(isinstance(n, int) for n in lst)
Out[4]: True

In [5]: lst = (1,2,'3')

In [6]: all(isinstance(n, int) for n in lst)
Out[6]: False

您也可以使用isinstance(n, int)

代替type(n) is int

答案 1 :(得分:4)

all(isinstance(i, int) for i in your_list))

答案 2 :(得分:4)

根据您正在做的事情,使用duck typing可能更具Pythonic。这样,int-like(浮点数等)的东西也可以和int一起传递。在这种情况下,您可以尝试将元组中的每个项目转换为int,然后捕获出现的任何异常:

>>> def convert_tuple(t, default=(0, 1, 2)):
...     try:
...         return tuple(int(x) for x in t)
...     except ValueError, TypeError:
...         return default
... 

然后你可以像这样使用它:

>>> convert_tuple((1.1, 2.2, 3.3))
(1, 2, 3)
>>> convert_tuple((1.1, 2.2, 'f'))
(0, 1, 2)
>>> convert_tuple((1.1, 2.2, 'f'), default=(8, 9, 10))
(8, 9, 10)

答案 3 :(得分:0)

仅提及可能性,您可以通过以下方式避免列表理解:

all(map(lambda x: isinstance(x, int), your_list))