मैंने हाल ही में एक नेस्टेड पायथन सूची को फ़्लैट करने का एक तरीका ढूंढ लिया, जैसे: [[1,2,3], [4,5,6]], इसमें: [1,2,3,4,5, 6]।एक पायथन सूची को फ़्लैट करने के लिए सूची समझ कैसे काम करती है?
Stackoverflow हमेशा की तरह मददगार था और मैं इस सरल सूची समझ के साथ a post पाया:
l = [[1,2,3],[4,5,6]]
flattened_l = [item for sublist in l for item in sublist]
मैंने सोचा था कि मैं समझ गया कि कैसे सूची comprehensions काम करते हैं, लेकिन जाहिरा तौर पर मैं सबसे मंद विचार नहीं मिला है।
exactly_the_same_as_l = [item for item in sublist for sublist in l]
कोई व्याख्या कर सकते हैं कि कैसे अजगर इन बातों की व्याख्या: क्या मुझे सबसे ज्यादा पहेली है कि ऊपर समझ के अलावा, यह भी चलाता है (हालांकि यह एक ही परिणाम नहीं देता है) है? दूसरी मजबूती के आधार पर, मैं उम्मीद करता हूं कि अजगर इसे वापस सामने लाएगा, लेकिन स्पष्ट रूप से यह हमेशा मामला नहीं है। यदि यह था, पहली समझ में एक त्रुटि फेंकनी चाहिए, क्योंकि 'sublist' मौजूद नहीं है। मेरा दिमाग पूरी तरह से warped है, मदद करो!
लूप के लिए सामान्य में बदलने का सबसे अच्छा तरीका है और यह देखने के लिए प्रिंट का उपयोग करें कि –
दूसरी समझ केवल इसलिए काम करती है क्योंकि 'आइटम' और 'सब्लिस्ट' पहली समझ से अपने अंतिम मूल्य बनाए रखती है। इसे पहले चलाएं (या 'डेल आइटम; डेल sublist' तो यह करते हैं) और यह अपेक्षित के रूप में' NameError' देगा। यहां अजीबता पाइथन के स्कॉइंग नियमों में है, समझ में नहीं। –
@MarkWhitfield केवल python2 में ... python3 सूची-समझ में genexps के रूप में व्यवहार करते हैं और बाहरी दायरे में चर को रिसाव नहीं करते हैं। – Bakuriu