2014-10-03 9 views
7

मैंने देखा है लोगों को अभी एक पुरानीस्लाइस से अंतिम तत्व को कैसे हटाया जाए?

*slc = append(*slc[:item], *slc[item+1:]...) 

लेकिन क्या आप टुकड़ा में अंतिम तत्व को निकालना चाहते हैं जोड़कर एक नया टुकड़ा बनाते हैं?

आप i+1 साथ i (पिछले तत्व) को बदलने के लिए प्रयास करते हैं तो यह सीमा त्रुटि से बाहर देता है के बाद से कोई i+1

उत्तर

12

आप len() उपयोग कर सकते हैं लंबाई और फिर से टुकड़ा पिछले तत्व से पहले सूचकांक का उपयोग कर लगता है:

if len(slice) > 0 { 
    slice = slice[:len(slice)-1] 
} 

Click here to see it in the playground

+0

जो 'लेन (टुकड़ा) == 0':' दहशत: रनटाइम त्रुटि: स्लाइस सीमा से बाहर सीमा 'में विफल रहता है। – peterSO

+0

... अच्छा, हाँ। वह सवाल का हिस्सा नहीं था .. लेकिन मैं इसके जवाब में मदद करने के लिए अपना जवाब अपडेट करूंगा। –

+2

इसके अलावा, नहीं: =, टुकड़ा पहले ही परिभाषित किया गया है। :) – LinearZoetrope

0

टी एल; डॉ:

myslice = myslice[:len(myslice) - 1] 

वैसे, यह होगा असफल हो अगर "myslice" शून्य आकार का है।

लंबे समय तक जवाब:

myslice = myslice[:len(myslice) - 1] 

यह अगर "myslice" शून्य आकार है असफल हो जायेगी।

स्लाइस डेटा संरचनाएं हैं जो एक अंतर्निहित सरणी को इंगित करती हैं और एक टुकड़ा टुकड़ा करने जैसे संचालन समान अंतर्निहित सरणी का उपयोग करते हैं।

इसका मतलब है कि यदि आप एक टुकड़ा टुकड़ा करते हैं, तो नया टुकड़ा अभी भी मूल टुकड़ा के समान डेटा पर इंगित करेगा।

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

संपादित

स्पष्टीकरण: आप अपने मूल लंबाई को टुकड़ा reslice यदि आप पिछले वस्तु

/संपादित

संदर्भित करने के लिए अगर आपके पास सक्षम हो जाएगा एक बहुत बड़ा टुकड़ा और आप स्मृति को बचाने के लिए अंतर्निहित सरणी को भी छीनना चाहते हैं, तो शायद आप एक छोटे टुकड़े के साथ एक नया टुकड़ा बनाने के लिए "प्रतिलिपि" का उपयोग करना चाहते हैं और पुराने बड़े टुकड़े को कचरा इकट्ठा करने दें।

+0

@tommywild: अंतिम तत्व को संदर्भित करने के बारे में स्पष्टीकरण जोड़ा गया। मैं समझता हूं कि इस तत्व को "हटाने" के दौरान आप क्या कर रहे हैं, इस पर स्पष्टीकरण दिया गया है। दरअसल आप केवल ऐपेंड का उपयोग कर सकते हैं। यदि यह परिवर्तन आपको संतुष्ट करता है, तो क्या आप -1 को हटा सकते हैं? ईमानदारी से मुझे यह नहीं लगता कि यह एक -1:/ – DallaRosa

+0

@tommywild ठीक है :) वैसे भी, आपके अंक मान्य थे, इसे इंगित करने के लिए धन्यवाद :) – DallaRosa

+1

सुनिश्चित नहीं है कि -1 या तो .. तो एक और अपवित्र है। आपका जवाब वास्तव में मेरे से अधिक व्यापक है। –

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