python - Whats the correct way of writing this list comprehension? -


मुझे एक त्रुटि मिल रही है: नाम 'i' परिभाषित नहीं है

< पूर्व> k = [[राड्स [i] [जे] [0] ['ए'] * राड्स [आई] [जे] [1] ['बी'] आई रेंज में (0, 10)] जम्मू के लिए रेंज (0, लेन (फेर्स [आई])]]

लेकिन

  k = [rids [i] [j] [0 ] [[ए '] * राइड [आई] [जे] [1] [' बी '] श्रेणी में जी के लिए रेंज (0,10) में (0, लेन (फेर्स [आई]))]   

आश्चर्य की बात है!

संपादित करें: इसे लिखने का सही तरीका क्या है? मैं लूप के लिए बाहरी के लिए Iterator के रूप में एक 2 डी मैट्रिक्स उत्पन्न करने की कोशिश कर रहा हूं; जम्मू के रूप में आंतरिक लूप के लिए इटरेटर।

दूसरे के लिए ध्यान से देखें पाश: के लिए सीमा में जम्मू (0, लेन (furs [i])) । आप यहां i की बात कर रहे हैं, भले ही यह पहले की सूची की समझ ( [rids [i] [j] [0] ['a'] * rids [i ] [जे] [1] ['बी'] के लिए आई श्रेणी में (0, 10)] )।

i उस पहली समझ के दायरे तक सीमित है; जिससे यह दूसरी समझ के लिए दिखाई नहीं दे रहा है। परिणामस्वरूप आपको त्रुटि मिलती है।

दूसरा संस्करण काम करता है क्योंकि दोनों i और j को एक ही सूची की समझ में घोषित और उपयोग किया जाता है।

हमें स्निपेट को थोड़ा सा सरल बनाते हैं इसे आज़माएं:

  & gt; & gt; & gt; ट्रैफ़िक (सबसे हाल ही में कॉल अंतिम): जम्मू के रेंज (0, आई)] के लिए [[i * j श्रेणी में (0,10)] ट्रेसबैक: फ़ाइल "& lt; pyshell # 35" gt; लाइन 1, & lt; मॉड्यूल & gt ; श्रेणी में जे के लिए [[i * j श्रेणी में (0,10)] (0, आई)] नाम की त्रुटि: नाम 'आई' परिभाषित नहीं है & gt; & gt; & gt;  

अब समझें गठबंधन करें, जिससे वही गुंजाइश में i और j लाया जा सकता है:

  & gt; & gt; & gt; [0, 0, 2, 0, 3, 6, 0, 4, 8, 12, 0, 5, 10, 0, 0, 0, 0, 15, 20, 0, 6, 12, 18, 24, 30, 0, 7, 14, 21, 28, 35, 42, 0, 8, 16, 24, 32, 40, 48, 56, 0, 9, 18, 27, 36, 45, 54, 63, 72] & gt; & gt; & gt;  

अब (गाली = पी) फिर से पहली बार समझने की कोशिश करें:

  & gt; & gt; & gt; [[0, 0, 0, 0, 0, 0, 0, 0, 0], [0] में जम्मू के लिए [[i * j श्रेणी के लिए (0,10)] [0 , 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 10, 12, 14, 16, 18], [0, 3, 6, 9] , 12, 15, 18, 21, 24, 27], [0, 4, 8, 12, 16, 20, 24, 28, 32, 36], [0, 5, 10, 15, 20, 25, 30 , 35, 42, 49, 56, 63, 0, 6, 12, 18, 24, 30, 36, 42, 48, 54], [0, 7, 14, 21, 28, 35] ], [0, 8, 16, 24, 32, 40, 48, 56, 64, 72]] & gt; & gt; & gt;  

टा दा! यह काम करता है लेकिन भिन्न परिणाम देता है ऐसा क्यों है? इसका कारण यह है कि i का (अंतिम) मान, उदाहरण के दो के बाद सबसे ज्यादा गुंजाइश में उपलब्ध है। यही है, सूची की समझ के अंदर बनाए गए चर REPL गुंजाइश में उपलब्ध हैं।

(पीएस: मेरा मानना ​​है कि उपरोक्त पैराग्राफ को फिर से बदला जा सकता है। यहां बेहतर पायथनिस्ट्स, कृपया मदद करें)

इसे सत्यापित करने के लिए, i को हटाने का प्रयास करें और उदाहरण 3 को फिर से चलाएं।

  & gt; & gt; & gt; डेल आई & gt; & gt; & gt; ट्रैफिक बैक (सबसे हाल ही में कॉल अंतिम): जम्मू के रेंज (0, आई)] के लिए [[i * जम्मू रेंज (0,10)]: फ़ाइल "& lt; pyshell # 41" gt; लाइन 1, & lt; मॉड्यूल & gt ; श्रेणी में जे (j, i) के लिए [[i * j श्रेणी के लिए (0, 10)] नाम की त्रुटि: नाम 'आई' परिभाषित नहीं है & gt; & gt; & gt;  

और हम वापस एक वर्ग में हैं।


Comments