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
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
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
all(isinstance(i, int) for i in your_list))
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)
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
Inoltre, 'type()' restituisce '' per le classi vecchio stile. –
Gandaro