2012-01-22 16 views
7

Come si verifica che il tipo di tutti gli elementi di una lista o di una tupla siano uguali e di un certo tipo?Test tipo di elementi tupla/elenco python

ad esempio:

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

risposta

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 

Invece di isinstance(n, int) si potrebbe anche usare type(n) is int

+6

L'OP dovrebbe essere ha avvertito che questo può portare a comportamenti imprevisti in Python 2, perché isinstance (10 ** 100, int) == False. Dovresti fare isinstance (n, (int, long)). Ma in Python, la necessità di controllare il tipo di qualcosa è spesso un segno di un errore di progettazione con cui iniziare. – DSM

+2

Inoltre, 'type()' restituisce '' per le classi vecchio stile. – Gandaro

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

A seconda di cosa si sta facendo può essere più Pythonic per usare duck typing. In questo modo, le cose che sono int-like (float, ecc.) Possono essere passate come pure. In questo caso, si potrebbe provare la conversione di ogni elemento della tupla a un int, e poi prendere le eventuali eccezioni che sorgono:

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

Quindi è possibile utilizzare in questo modo:

>>> 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)