2012-01-22 20 views
7

आप कैसे सत्यापित करते हैं कि किसी सूची या टुपल में सभी तत्वों का प्रकार समान और एक निश्चित प्रकार का है?टेस्ट प्रकार के तत्व पायथन ट्यूपल/सूची

उदाहरण के लिए

:

(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

ओपी होना चाहिए चेतावनी दी है कि इससे पाइथन 2 में अप्रत्याशित व्यवहार हो सकता है, क्योंकि इंस्टेंसेंस (10 ** 100, int) == गलत है। आपको इंस्टेंसेंस करना होगा (एन, (int, long))। लेकिन पायथन में, किसी चीज़ के प्रकार की जांच करने की आवश्यकता अक्सर एक डिजाइन गलती का संकेत है जिसके साथ शुरू होता है। – DSM

+2

इसके अलावा, पुरानी शैली के वर्गों के लिए 'टाइप() 'रिटर्न' <टाइप 'इंस्टेंस'>'। – Gandaro

4

इस्तेमाल कर सकते हैं आप क्या कर रहे हो सकता है पर निर्भर करता है यह duck typing का उपयोग करने के लिए अधिक पाइथोनिक बनें। इस तरह, चीजें जो इंट-जैसी (फ्लोट्स इत्यादि) हैं, साथ ही इनट्स भी पारित की जा सकती हैं। इस मामले में, आप एक 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) 
संबंधित मुद्दे