2012-06-27 20 views
5

अगर मैं 10 तत्वों के साथ इस सूची में है:पायथन नकारात्मक सूची अनुक्रमणिका क्यों लौटाता है?

>>> l = [1,2,3,4,5,6,7,8,9,0] 

क्यों एल [10] वापस आ जाएगी एक IndexError, लेकिन एल [-1] रिटर्न 0?

>>> l[10] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 
>>> l[0] 
1 
>>> l[-1] 
0 
>>> l[-2] 
9 

यदि मैं सूची में कोई पिछला तत्व नहीं हूं तो मैं क्या करना चाहता हूं, एक त्रुटि फेंकना है।

+0

"सूची में कोई पिछले तत्व" से आपका क्या मतलब है? यदि "पिछले" से आपका मतलब है "वर्तमान तत्व के बाईं ओर", तो लैटवेयर के उत्तर को अच्छी तरह से सेवा देना चाहिए। लेकिन मैं मदद नहीं कर सकता लेकिन आश्चर्यचकित हूं कि क्या आपका मतलब कुछ और है। –

उत्तर

19

पायथन में, नकारात्मक सूची सूचकांक सूची के दाईं ओर से गिने गए आइटम इंगित करते हैं (यानी l[-n]l[len(l)-n] के लिए शॉर्टेंड है)।

यदि आप पाते हैं तो आपको एक त्रुटि इंगित करने के लिए नकारात्मक सूचकांक की जरूरत है, तो आप बस उस मामले के लिए जाँच कर सकते हैं और अपवाद अपने आप को बढ़ाने के (या फिर इसे संभालने के लिए और वहाँ):

index = get_some_index() 
if index < 0: 
    raise IndexError("negative list indices are considered out of range") 
do_something(l[index]) 
+0

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

+0

@ जोन क्लेमेंट्स मैं उप-वर्ग का सुझाव नहीं दे रहा हूं , इसलिए सूची * अलग-अलग व्यवहार नहीं करेगी, केवल उस विशेष उदाहरण में जहां आप नकारात्मक सूचकांक को संभव नहीं बनाना चाहते हैं, इसके साथ सौदा करें। –

2

यह है, क्योंकि l[-1] बराबर है l[len(l)-1] को, इसी तरह l[-2] को l[len(l)-2]

>>> lis=[1,2,3,4,5] 
>>> lis[-1],lis[-2],lis[-3] 
(5, 4, 3) 
>>> lis[len(lis)-1],lis[len(lis)-2],lis[len(lis)-3] 
(5, 4, 3) 
1

क्यू बराबर है: क्यों l[10] एक वापस आ जाएगी n IndexError, लेकिन l[-1]0 देता है?

: क्योंकि पाइथन (जैसा कि कई अन्य भाषाओं में) में सूचकांक मान शून्य-आधारित हैं। इसका मतलब है कि पहला आइटम इंडेक्स 0 पर संग्रहीत है।

आपकी सूची

l = [1,2,3,4,5,6,7,8,9,0] 

10 आइटम नहीं है। चूंकि सूचकांक 0 पर शुरू होता है, इसलिए अंतिम आइटम सूचकांक 9 पर होगा। जब आप इंडेक्स 10 पर अपनी सूची तक पहुंचने का प्रयास करते हैं, तो पाइथन सही तरीके से IndexError अपवाद फेंकता है ताकि आपको यह बताने के लिए कि यह वैध सूचकांक मान नहीं है और सीमा से बाहर है।

पायथन भी सूची या अनुक्रम के "अंत" से वस्तुओं तक पहुंचने के लिए नकारात्मक सूचकांक मानों के सम्मेलन का उपयोग करता है। इंडेक्स वैल्यू -1 सूची में अंतिम आइटम को इंगित करता है, -2 अगली-से-आखिरी आदि। चूंकि आपकी सूची में अंतिम आइटम 0 है, यह l[-1] रिटर्न है।

@ लैटवेयर का जवाब पहले से ही आपको एक अपवाद उत्पन्न/फेंकने का तरीका दिखाता है, मुझे उम्मीद है कि यह आपके प्रारंभिक प्रश्न का उत्तर देगा।

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