2014-04-13 8 views
27

ढूंढते समय खाली सूची/अमान्य इनपुट प्रबंधित करें मुझे पाइथन में max(list) और min(list) का उपयोग कर सूची का अधिकतम मूल्य और न्यूनतम मान मिल रहा है। हालांकि, मुझे आश्चर्य है कि खाली सूचियों का प्रबंधन कैसे करें।सूची के अधिकतम/न्यूनतम मूल्य (पायथन)

उदाहरण के लिए यदि सूची एक खाली सूची [] है, कार्यक्रम 'ValueError: min() arg is an empty sequence' को जन्म देती है, लेकिन मुझे पता है कि कैसे इस कार्यक्रम सिर्फ बस दुर्घटनाग्रस्त के बजाय 'empty list or invalid input' मुद्रित करना चाहते हैं। उन त्रुटियों का प्रबंधन कैसे करें?

उत्तर

7

अपवाद को पकड़ें और प्रबंधित करें।

try: 
    print(min(l), max(l)) 
except (ValueError, TypeError): 
    print('empty list or invalid input') 

ValueError खाली अनुक्रम के साथ उठाया गया है। अनुक्रम में अपरिवर्तनीय प्रकार होने पर TypeError उठाया जाता है।

+0

इस अजगर में यह करने के लिए पसंदीदा तरीका है (अपवाद सस्ते हैं): https://docs.python.org/3/glossary.html# टर्म-एएफपी –

+3

एक दुष्प्रभाव है: यदि किसी अन्य प्रकार की स्टैक पर कुछ अन्य त्रुटि कम होती है, तो यह भी पकड़ा जाएगा। यह गलतता अपवाद हैंडलिंग के लिए आलोचना का प्राथमिक स्रोत है। इस विशेष मामले में, हालांकि यह शायद थोड़ी चिंता का विषय है। –

47

पायथन 3.4 में, default कीवर्ड तर्क min और max फ़ंक्शंस में जोड़ा गया है। यदि रिक्त सूची (या किसी अन्य पुनरावर्तनीय वस्तु) पर फ़ंक्शंस का उपयोग किया जाता है तो यह आपके चयन का मूल्य वापस करने की अनुमति देता है। उदाहरण के लिए: default कीवर्ड नहीं दिया जाता है

>>> min([], default='no elements') 
'no elements' 

>>> max((), default=999) 
999 

>>> max([1, 7, 3], default=999) # 999 is not returned unless iterable is empty 
7 

हैं, तो एक ValueError बजाय बढ़ जाता है।

+0

यह मेरा मानना ​​स्वीकार्य उत्तर होना चाहिए। –

40

अजगर के पुराने संस्करणों में एक डिफ़ॉल्ट निर्दिष्ट करना:

max(list or [0]) 
max(list or ['empty list']) 
+5

बहुत अच्छा। उत्सुकता के लिए, यह काम करता है क्योंकि पाइथन में खाली सूचियां झूठी हैं ... इसलिए '[1,2,3] या 'कुछ और' है [1,2,3], लेकिन' [] या 'कुछ और' 'कुछ और' है। यदि उत्तरार्द्ध एक आइटम सूची है, तो 'min()' हमेशा अपना एकमात्र आइटम लौटाएगा। – Martin

+5

दुर्भाग्य से यह खाली iterators के लिए काम नहीं करता है। –

संबंधित मुद्दे