2009-08-15 14 views
8

मैं अजगर के साथ एक सा आसपास mucking किया गया है में .. एक्सेस करना पायथन के लिए में ऑफसेट के साथ तत्वों, और मैं इकट्ठा कर लिया है कि यह आम तौर पर बेहतर है (या 'pythonic') बल्किछोरों

for x in SomeArray: 

उपयोग करने के लिए अधिक सी-शैली

for i in range(0, len(SomeArray)): 

की तुलना में मैं इस में लाभ, मुख्य रूप से क्लीनर कोड, और अच्छा map() और संबंधित कार्यों का उपयोग करने की क्षमता देखते हैं। हालांकि, मुझे अक्सर उस स्थिति का सामना करना पड़ रहा है जहां मैं सरणी में अलग-अलग ऑफ़सेट के तत्वों को एक साथ एक्सेस करना चाहता हूं। उदाहरण के लिए, मैं तत्व के लिए दो तत्वों के तत्व को वर्तमान तत्व जोड़ना चाहूंगा। स्पष्ट सूचकांक का उपयोग किए बिना ऐसा करने का कोई तरीका है?

+1

ध्यान दें कि श्रेणी (0, लेन (कुछअरे)) अधिक सामान्य सीमा (लेन (कुछअरे)) के बराबर है। – EOL

उत्तर

14

अजगर में ऐसा करने का तरीका है:

for i, x in enumerate(SomeArray): 
    print i, x 

enumerate जनरेटर 2-tuples, प्रत्येक सरणी सूचकांक और तत्व से युक्त का एक अनुक्रम पैदा करता है।

+0

लेकिन मैं लूप के एक पुनरावृत्ति में पिछले/बाद के तत्वों को कैसे एक्सेस करूं? – int3

+0

लूप के अंदर, आप SomeArray [i-1] या SomeArray [i + 1] तक पहुंच सकते हैं। –

+0

'कुछअरे [i-1] '? लेकिन हो सकता है कि आप यह समझाना चाहें कि आप वास्तव में क्या कर रहे हैं – SilentGhost

6

सूची अनुक्रमण और ज़िप() आपके मित्र हैं।

मैं इसके पीछे दो कदम तत्व को वर्तमान तत्व जोड़ने के लिए चाहते हो सकता है:

यहाँ अपने अधिक विशिष्ट प्रश्न के लिए मेरा उत्तर है। स्पष्ट सूचकांक का उपयोग किए बिना ऐसा करने का कोई तरीका है?

arr = range(10) 
[i+j for i,j in zip(arr[:-2], arr[2:])] 

तुम भी मॉड्यूल numpy अगर आप संख्यात्मक सरणियों पर काम करना चाहते हैं का उपयोग कर सकते हैं। उदाहरण के लिए, ऊपर कोड अधिक सुंदर ढंग से लिखा जा सकता है के रूप में:

import numpy 
narr = numpy.arange(10) 
narr[:-2] + narr[2:] 

के लिए (n-2) वें तत्व को वें तत्व (एम + 2) तत्व को महीना तत्व जोड़ने के समकक्ष है (जोड़ना गणितीय रूप से झुकाव, हमने प्रतिस्थापन एन-> एम + 2 प्रदर्शन किया)। एन की सीमा [2, लेन (एआर)) है और एम की सीमा [0, लेन (एआर) -2 है)। ब्रैकेट और कंस्ट्रैसिस नोट करें। 0 से लेन (एआर) -3 के तत्व (आप पिछले दो तत्वों को बाहर करते हैं) को अनुक्रमित किया गया है [: -2] जबकि 2 से लेन (एआर) -1 के तत्व (आप पहले दो तत्वों को बाहर करते हैं) को अनुक्रमित किया गया है [ 2:]।

मुझे लगता है कि आप पहले ही सूची की समझ जानते हैं।

+0

हाँ मुझे सूची समझ पता है। हालांकि वास्तव में उनका उपयोग नहीं किया है। ज़िप() एक और अच्छा समाधान की तरह दिखता है, धन्यवाद! – int3

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