2012-01-22 23 views
7

Bir listedeki veya bir parçadaki tüm elemanların türünün aynı ve belirli türde olduğunu nasıl doğrularsınız? örneğinTest tipi elemanlar python tuple/liste

:

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

cevap

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

Demo: Yerine isinstance(n, int) ait

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 

da ne yaptığınızı bağlı type(n) is int

+6

OP olmalıdır Python 2'de beklenmedik davranışlara yol açabileceği uyarısında bulundu, çünkü isinstance (10 ** 100, int) == False. Isinstance (n, (int, long)) yapmalısınız. Fakat Python'da, bir şeyin türünü kontrol etmeye ihtiyaç duymak, genellikle bir tasarım hatasının başlangıcıdır. – DSM

+2

Ayrıca, 'type()' eski stil sınıfları için 'döndürür. – Gandaro

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

kullanabilirsiniz o olabilir duck typing kullanmak için daha fazla Pythonic olun. Bu şekilde, int-like (floatlar, vb.) Şeyler de ints gibi iletilebilir. Bu durumda, bir int için demet içinde her öğeyi dönüştürmeyi deneyin ve ardından ortaya çıkan durumlar catch olabilir:

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

Sonra şöyle kullanabilirsiniz:

>>> 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) 
İlgili konular