2009-08-06 6 views
8

सरणियों और अजगर और Numpy में सूचियों के लिए लाइनों बराबर निम्नलिखित हैं:'x में सरणी' के लिए हमेशा क्रमबद्ध एक्स में परिणाम होता है? [अजगर/NumPy]

itemlist = [] 
for j in range(len(myarray)): 
    item = myarray[j] 
    itemlist.append(item) 

और:

itemlist = [] 
for item in myarray: 
    itemlist.append(item) 

मैं आदेश itemlist की में दिलचस्पी रखता हूँ। कुछ उदाहरणों में मैंने कोशिश की है कि वे समान हैं, लेकिन क्या यह की गारंटी है? उदाहरण के लिए, मुझे पता है कि सी # में foreach कथन आदेश की गारंटी नहीं देता है, और मुझे इसके साथ सावधान रहना चाहिए।

+0

क्या आपका मतलब था: जे श्रेणी में (लेन (myarray)):? – clawrence

+0

ओह, हाँ, मुझे एक श्रेणी में फेंकने का मतलब था() – Chris

उत्तर

10

यह सूचियों के लिए गारंटीकृत है। मुझे लगता है कि आपके सी # उदाहरण के समानांतर अधिक प्रासंगिक पायथन एक शब्दकोश में चाबियों को फिर से चालू करना होगा, जो किसी भी क्रम में होने की गारंटी नहीं है।

# Always prints 0-9 in order 
a_list = [0,1,2,3,4,5,6,7,8,9] 
for x in a_list: 
    print x 

# May or may not print 0-9 in order. Implementation dependent. 
a_dict = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9} 
for x in a_dict: 
    print x 

for <element> in <iterable> संरचना केवल चिंता है कि iterable आपूर्ति एक next() समारोह जो कुछ देता है। कोई सामान्य गारंटी नहीं है कि ये तत्व for..in कथन के डोमेन पर किसी भी क्रम में वापस आते हैं; सूचियां एक विशेष मामला है।

+1

उस सरणी को हाइलाइट करने के लिए धन्यवाद आदेश की धारणा है, यह अगले() फ़ंक्शन के माध्यम से लागू किया गया है। के लिए ... में ... संरचना अगले() का लाभ लेती है, और इसलिए एक आंतरिक क्रम (सरणी) के साथ डेटा आंतरिक (आंतरिक रूप से) के बिना डेटा से अलग() अलग-अलग लागू करता है। – Chris

10

हां, यह पूरी तरह से गारंटीकृत है। for item in myarray, (जहां myarray एक अनुक्रम, जो numpy के सरणियों, builtin सूचियों, पायथन के array.arrays, आदि आदि भी शामिल है) के लिए अजगर में तथ्य बराबर में है: कुछ प्रेत चर _aux के लिए

_aux = 0 
while _aux < len(myarray): 
    item = myarray[_aux] 
    ...etc... 

;-) । Btw, अपने निर्माणों के दोनों भी

itemlist = list(myarray) 
+0

धन्यवाद! हाँ, मैं वास्तव में एक सूची में एक सरणी को बदलने की कोशिश नहीं कर रहा था, बस ऑर्डर की खोज कर रहा था। – Chris

6

हाँ के बराबर हैं, Python Language Reference की गारंटी देता है यह (मेरा जोर है):

for_stmt ::= "for" target_list "in" expression_list ":" suite 
       ["else" ":" suite] 

"सूट तो द्वारा प्रदान की प्रत्येक आइटम के लिए एक बार निष्पादित किया जाता है आरोही सूचकांक के क्रम में इटरेटर, । "

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