2012-01-22 32 views

回答

26
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

+6

的OP应该是警告说这会导致Python 2中的意外行为,因为isinstance(10 ** 100,int)== False。你需要做isinstance(n,(int,long))。但在Python中,需要检查某种类型的东西常常是开始时出现设计错误的标志。 – DSM

+2

此外,对于旧式类,'type()'返回'''。 – Gandaro

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

取决于你在做什么它可能使用duck typing会更加Pythonic。这样,像int(浮点数等)的东西可以被传递以及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)