Jak sprawdzić, czy typ wszystkich elementów na liście lub krotce jest taki sam i określonego typu?Typ testu elementów python tuple/list
na przykład:
(1, 2, 3) # test for all int = True
(1, 3, 'a') # test for all int = False
Jak sprawdzić, czy typ wszystkich elementów na liście lub krotce jest taki sam i określonego typu?Typ testu elementów python tuple/list
na przykład:
(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
Zamiast isinstance(n, int)
można również użyć type(n) is int
all(isinstance(i, int) for i in your_list))
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)
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
Ponadto, 'type()' zwraca '' dla klas w starym stylu. –
Gandaro