2012-07-13 10 views
13

क्या कोई मुझे इस पायथन कोड स्निपेट की आखिरी पंक्ति समझा सकता है?पायथन में सूची के भीतर लूप के लिए क्या करता है?

Cell सिर्फ एक और वर्ग है। मुझे समझ में नहीं आता कि लूप का उपयोग Cell ऑब्जेक्ट्स को Column ऑब्जेक्ट में संग्रहीत करने के लिए किया जा रहा है।

class Column(object): 

    def __init__(self, region, srcPos, pos): 

     self.region = region 
     self.cells = [Cell(self, i) for i in xrange(region.cellsPerCol)] #Please explain this line. 
+2

यह एक 'सूची समझ' कहा जाता है –

उत्तर

29

आप जिस कोड के बारे में पूछ रहे हैं उसकी लाइन list comprehension का उपयोग कर सूची बनाने के लिए और इस सूची में एकत्रित डेटा को self.cells पर असाइन करें। यह

self.cells = [] 
for i in xrange(region.cellsPerCol): 
    self.cells.append(Cell(self, i)) 

स्पष्टीकरण के बराबर है:

सबसे अच्छा व्याख्या करने के लिए कि यह कैसे काम करता है, कुछ सरल उदाहरण मदद से आप समझने के कोड आप में शिक्षाप्रद हो सकता है। यदि आप पाइथन कोड के साथ काम करना जारी रखने जा रहे हैं, तो आप फिर से सूची समझ में आ जाएंगे, और आप इसे स्वयं इस्तेमाल करना चाहेंगे।

ध्यान दें, नीचे दिए गए उदाहरण में, दोनों कोड खंडों बराबर कि में हैं वे मूल्यों की एक list सूची myList में संग्रहीत पैदा करते हैं।

उदाहरण के लिए:

myList = [] 
for i in range(10): 
    myList.append(i) 

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

myList = [i for i in range(10)] 

सूची comprehensions के बराबर है सूची समझ के साथ इसे व्यक्त भी कर सकता है।

यह उदाहरण केवल सूची में भी गिने मूल्यों एकत्र:

myList = [] 
for i in range(10): 
    if i%2 == 0:  # could be written as "if not i%2" more tersely 
     myList.append(i) 

और बराबर सूची समझ:

myList = [i for i in range(10) if i%2 == 0] 

दो अंतिम नोट:

  • आप "नेस्ट कर सकते हैं "सूची की सूची, लेकिन वे जल्दी समझने के लिए मुश्किल हो जाते हैं :)
  • सूची समझ समकक्ष-लूप की तुलना में तेज़ी से चलती है, और इसलिए नियमित रूप से पाइथन प्रोग्रामर के साथ पसंदीदा होता है जो दक्षता के बारे में चिंतित हैं।

ठीक है, एक आखिरी उदाहरण यह दर्शाता है कि आप सूची में उन वस्तुओं को भी लागू कर सकते हैं जिन्हें आप सूची में बदल रहे हैं।यह float() का उपयोग करता मूल्यों फ्लोट करने के लिए स्ट्रिंग की एक सूची कन्वर्ट करने के लिए:

data = ['3', '7.4', '8.2'] 
new_data = [float(n) for n in data] 

देता है:

new_data 
[3.0, 7.4, 8.2] 
1

यह वही है जैसे आप ऐसा किया है:

def __init__(self, region, srcPos, pos): 
    self.region = region 
    self.cells = [] 
    for i in xrange(region.cellsPerCol): 
     self.cells.append(Cell(self, i)) 

यह एक list comprehension कहा जाता है।

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

  • कोई संबंधित समस्या नहीं^_^