2015-01-22 10 views
37

The Python tutorial सूचकांक नकारात्मक होने पर स्लाइस व्यवहार बताते हैं, लेकिन अंत इंडेक्स प्रारंभ सूचकांक से पहले जब मैं व्यवहार का वर्णन करने वाले दस्तावेज नहीं ढूंढ पा रहा हूं। (मैंने Explain Python's slice notation पर भी देखा है, और शायद मैं पर्याप्त रूप से पर्याप्त नहीं पढ़ रहा हूं, लेकिन उत्तर इस बिंदु को संबोधित नहीं करते हैं।)सूची है [i: j] सूची [j] सूची से पहले [i] सूची में एक खाली सूची होने की गारंटी है?

जो व्यवहार मैं देखता हूं वह यह है कि एक खाली सूची लौटा दी जाती है, जो मुझे उचित लगता है। हालांकि, यह मेरे लिए उचित लगता है कि i और j के बीच वस्तुओं की सूची को उलट क्रम में या बस अपवाद बढ़ाने के लिए उचित लगेगा।

list[i:j]list[j]list[i] से पहले एक खाली सूची होने की गारंटी है?

उत्तर

44

हां, यदि j <= i सत्य है, तो परिणामी टुकड़ा खाली है, मानक पायथन प्रकार के लिए। उलटे क्रम में परिणाम प्राप्त करने के लिए, आप एक नकारात्मक कदम जोड़ने की जरूरत:

list[i:j:-1] 

क्योंकि स्पष्ट अंतर्निहित से बेहतर है।

यह Common Sequence Operations में दर्ज है, फुटनोट 4:

रोंमैं से की टुकड़ा जे के सूचकांक कश्मीर ऐसी है कि i <= k < j के साथ आइटम की अनुक्रम के रूप में परिभाषित किया गया है। यदि i या jlen(s) से अधिक है, तो len(s) का उपयोग करें। यदि i छोड़ा गया है या None है, तो 0 का उपयोग करें। यदि j छोड़ा गया है या None है, तो len(s) का उपयोग करें। यदि iजे से अधिक या बराबर है, तो टुकड़ा खाली है।

बोल्ड जोर मेरा है।

कस्टम प्रकार अलग-अलग व्याख्या करने के लिए स्वतंत्र हैं।

+1

आह, * वह है * जहां इसका उल्लेख पायथन दस्तावेज़ में किया गया है। ठीक वही जो मेरे द्वारा खोजा जा रहा था। – jamesdlin

+0

"मानक पायथन प्रकारों के लिए" इटालिक के साथ आपका क्या मतलब है? – inf

+2

@ बांसबन: स्लाइसों का संचालन प्रकार विशिष्ट है। 'सूची',' tuple', 'str',' बाइट्स 'और' श्रेणी 'प्रकार सभी इस तरह व्यवहार करते हैं, लेकिन यदि आप अपना स्वयं का प्रकार लागू करते हैं तो आपकी' __getitem__' विधि अलग-अलग स्लाइस को संभालने के लिए स्वतंत्र होती है। –

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