2012-01-22 19 views
7

リストまたはタプルのすべての要素の型が同じで、特定の型であることをどのように確認しますか?例えば要素のテスト型python tuple/list

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

答えて

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

デモ:

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 

代わりのisinstance(n, int)あなたも、あなたがそれをもやっていることに応じて、type(n) is int

+6

OPがどうあるべきisinstance(10 ** 100、int)== Falseなので、Python 2でこれが予期しない動作につながる可能性があると警告しました。 isinstance(n、(int、long))を行う必要があります。しかし、Pythonでは、何かのタイプをチェックする必要があるのは、しばしば、設計ミスの兆候です。 – DSM

+2

また、 'type()'は古いスタイルのクラスに対して ''を返します。 – Gandaro

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

を使用することができますより多くのPythonic duck typingを使用してください。そうすることで、int型(浮動小数点型など)のものもint型も渡すことができます。このケースでは、intにタプルの各項目を変換しようとし、その後に発生した例外をキャッチすることがあります

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

次にあなたがそうのようにそれを使用することができます:

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