2010-12-15 11 views
6

तो, मुझे लगता है कि array[:-1] को कॉल करना सरणी क्लोन करने जा रहा है।पाइथन लूप [: -1]

कहें कि इसमें 3000 तत्वों के साथ एक बड़ी सरणी है। मैं नहीं चाहता कि इसे क्लोन किया जाए क्योंकि मैं इसे खत्म कर दूंगा! मैं सिर्फ दूसरे के लिए पुन: प्रयास करना चाहता हूं।

for item in array[ :-1 ] : 
    # do something with the item 

तो मैं एक काउंटर चर का सहारा लेना है,

for c in range(0, len(array) - 1) : 
    # do something with array[ c ] 

करते हैं या वहाँ बनाने के लिए रास्ता है/array[:-1] वाक्य रचना कुशल हो जाएगा?

+1

संभव डुप्लिकेट [मैं एक अजगर सूची पर एक "दृश्य" बना सकते हैं?] (http://stackoverflow.com/questions/3485475/can-i-create-a-view-on-a-python-list) –

+2

अफसोस की बात है, "अन्य प्रश्न" पूरी तरह से 'itertools' पर चूक जाता है। इस प्रकार मैं इस प्रश्न को बंद करने के लिए * मतदान नहीं कर रहा हूं। –

+0

@pst अन्य प्रश्नों पर बेहतर उत्तर पोस्ट करने के लिए "सही काम करने" नहीं होगा? –

उत्तर

6
for item in itertools.islice(array, len(array) - 1): 
4

बाहर चेक itertools.islice क्या करेंगे यह लग रहा है:

from itertools import islice 
for item in islice(array, 0, len(array) - 1): 
    # do something with item 

इस बारे में है आप जो चाहते हैं उसका आधा; यह array[i] कहने की आवश्यकता को समाप्त करता है लेकिन len(array) - 1 निर्दिष्ट करने की आवश्यकता नहीं है।

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

2

के लिए जब आप नहीं करना चाहते हैं// अनुक्रम की लंबाई पता नहीं है नहीं कर सकते हैं:

def allbutlast(seq): 
    it = iter(seq) 
    el = next(it) 
    for e in it: 
    yield el 
    el = e 

for i in allbutlast([1, 2, 3]): 
    print i 
की