2012-01-22 23 views

Odpowiedz

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

Demo:

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 

Zamiast isinstance(n, int) można również użyć type(n) is int

+6

PO powinna być ostrzegł, że może to prowadzić do nieoczekiwanego zachowania w Pythonie 2, ponieważ isinstance (10 ** 100, int) == Fałsz. Musisz zrobić isinstance (n, (int, long)). Ale w Pythonie potrzeba sprawdzenia typu czegoś jest często oznaką błędu projektowego. – DSM

+2

Ponadto, 'type()' zwraca '' dla klas w starym stylu. – Gandaro

4

W zależności od tego, co robisz, to może być bardziej Pythonicznym używać duck typing. W ten sposób rzeczy, które są int-podobne (pływaki, itp.) Mogą być przekazywane, jak również ints. W tym przypadku, możesz spróbować konwersji każdy element w krotce do int, a następnie złapać żadnych wyjątków, które powstają:

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

Wtedy można go używać tak:

>>> 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) 
Powiązane problemy