मेरे पास list
है और एक और सूची (समझ के माध्यम से) बनाना चाहते हैं। मैं चाहूँगा इस नई सूची, आकार में सीमित करने के लिए किया जा एक शर्त के माध्यम सेसमझ के आकार को सीमित कैसे करें?
निम्नलिखित कोड विफल हो जाएगा:
a = [1, 2, 1, 2, 1, 2]
b = [i for i in a if i == 1 and len(b) < 3]
साथ
Traceback (most recent call last):
File "compr.py", line 2, in <module>
b = [i for i in a if i == 1 and len(b) < 3]
File "compr.py", line 2, in <listcomp>
b = [i for i in a if i == 1 and len(b) < 3]
NameError: name 'b' is not defined
क्योंकि b
पर अभी तक परिभाषित नहीं है समय समझ आ गई है।
क्या बिल्ड समय पर नई सूची के आकार को सीमित करने का कोई तरीका है?
नोट: मैं जब एक काउंटर तक पहुँच जाता है उचित break
के साथ एक for
लूप में समझ को तोड़ सकते थे, लेकिन मैं अगर वहाँ एक व्यवस्था है जिसके एक समझ का उपयोग करता है पता करने के लिए करना चाहते हैं।
'[1/i मैं रेंज में (-5, 5)]' टूट जाता है और अंत तक नहीं चलता है। –
@StefanPochmann: यह एक अपवाद उठाता है, यह * ब्रेक' कथन के समान * नहीं है। अंत में, आपके पास कोई सूची परिणाम नहीं है। –
मुझे यह स्पष्ट नहीं था कि आपका मतलब 'ब्रेक' कथन है, यह शब्द अधिक सामान्य तरीके से समझा जा सकता है। [उदाहरण के लिए] (http://stackoverflow.com/a/38675546/1672429) बहुत समय पहले आपने कहा था "* [' वापसी '] लूप से बाहर तोड़ता है "*। किसी भी मामले में, पुनरावृत्ति अंत तक नहीं जाती है। साथ ही, सूची परिणाम न होने पर भी एक समस्या नहीं होनी चाहिए। 'Reciprocals = [x में x के लिए 1/x] पर विचार करें, मुझे लगता है कि यह उचित कोड है और यदि' a' में शून्य है तो कोई भी 'ZeroDivisionError'' चाहता है और सूची नहीं चाहता है। –