如何验证列表或元组中所有元素的类型是否相同且属于某种类型?
例如:
(1, 2, 3) # test for all int = True
(1, 3, 'a') # test for all int = False
答案 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))