2010-08-10 8 views
15

तो मैं अजगर के साथ खेल रहा हूं और कुछ अजीब लगता है। किसी सूची से चयन करने में -1 का अर्थशास्त्र संगत प्रतीत नहीं होता है।पायथन सूची/उपनिवेश चयन -1 अजीबता

तो मैं संख्या

ls = range(1000) 

सूची का अंतिम तत्व की एक सूची है, तो निश्चित रूप ls[-1] की लेकिन अंत मैं करूंगा करने के लिए मध्य कहना से अगर मैं इस बात का एक sublist ले ताकि मैं सब कुछ प्राप्त

ls[500:-1] 

लेकिन यह मुझे सूची में अंतिम तत्व वाली एक सूची नहीं देता है, बल्कि इसके बजाय प्रत्येक सूची में यूपी को अंतिम तत्व में शामिल किया गया है। मैं भी दसवें तत्व (ताकि चयनकर्ता समावेशी होना चाहिए), क्यों तो यह -1 लिए काम नहीं करता युक्त एक सूची प्राप्त लेकिन अगर मैं

ls[0:10] 

है।

मैं निश्चित रूप से ls[500:] या ls[500:len(ls)] (जो मूर्खतापूर्ण होगा) कर सकते हैं। मैं बस सोच रहा था कि -1 के साथ सौदा क्या था, मुझे एहसास हुआ कि मुझे इसकी आवश्यकता नहीं है।

उत्तर

50

list[first:last] में, last शामिल नहीं है।

10 वीं तत्व ls[9] है, ls[0:10] में ls[10] नहीं है।

4

मैं दोनों मामलों के लिए संगत व्यवहार मिलता है:

>>> ls[0:10] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> ls[10:-1] 
[10, 11, 12, 13, 14, 15, 16, 17, 18] 

नोट, हालांकि, सूची की कि दसवें तत्व सूचकांक में, क्योंकि सूची 0 अनुक्रमित है। वह हो सकता है जहां आपका लटका हुआ हो।

दूसरे शब्दों में, [0:10] सूचकांक 0-10 से नहीं जाता है, यह प्रभावी रूप से 0 से दसवीं तत्व (जो आपको सूचकांक 0-9 से प्राप्त करता है, क्योंकि 10 स्लाइस के अंत में समावेशी नहीं है) ।

1

यह मेरे लिए काफी संगत लगता है; सकारात्मक सूचकांक भी समावेशी हैं। मुझे लगता है कि आप इसे गलत कर रहे हैं। कि सीमा() को याद भी गैर समावेशी है, और उस अजगर सरणियों 0 अनुक्रमित रहे हैं, यहाँ वर्णन करने के लिए एक नमूना अजगर सत्र है:

>>> d = range(10) 
>>> d 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> d[9] 
9 
>>> d[-1] 
9 
>>> d[0:9] 
[0, 1, 2, 3, 4, 5, 6, 7, 8] 
>>> d[0:-1] 
[0, 1, 2, 3, 4, 5, 6, 7, 8] 
>>> len(d) 
10 
1

जब एक सरणी टुकड़ा करने की क्रिया;

ls[y:x] 

तत्व y से स्लाइस लेता है और एक्स सहित नहीं। जब आप नकारात्मक अनुक्रमण का उपयोग यह

ls[y:-1] == ls[y:len(ls)-1] 

का उपयोग कर के बराबर है तो यह तो टुकड़ा पिछले तत्व तक हो सकता है, लेकिन यह यह शामिल नहीं होगा (टुकड़ा के अनुसार)

2

-1 प्रतिसाद नहीं इस अर्थ में विशेष नहीं है कि अनुक्रम पीछे की ओर पढ़ा जाता है, बल्कि यह सिरों के चारों ओर लपेटता है। इस प्रकार शून्य से शून्य का मतलब शून्य शून्य है, विशेष (और, सकारात्मक चरण मान के लिए, अनुक्रम "बाएं से दाएं" पढ़ा जाता है।

तो i = [1, 2, 3, 4] के लिए, i[2:-1] आइटम दो से -, जो [3] में जो परिणाम ('अंत करने के लिए चारों ओर' या,) का अर्थ है शुरुआत शून्य से एक। -1th तत्व या तत्व 0 पीछे की ओर 1 पिछले 4 है, लेकिन क्योंकि यह विशेष है, हम 3.

मिल मुझे आशा है कि यह कुछ हद तक समझा जा सकता है।

10

आप पिछले तत्व सहित एक उप सूची प्राप्त करना चाहते हैं, तो आप कोलन के बाद खाली छोड़ दें:

>>> ll=range(10) 
>>> ll 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> ll[5:] 
[5, 6, 7, 8, 9] 
>>> ll[:] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]