चेतावनी: इस कोड-गोल्फ के लिए एक सीधे ऊपर सवाल है, तो मुझे पता है कि मैं क्या पूछ रहा हूँ उत्पादन में बुरा व्यवहार हैएक सूची समझ दौरान संलग्न का उपयोग कर एक सूची में फेरबदल
मैं परिवर्तन करने के लिए कोशिश कर रहा हूँ एक सूची समझ के दौरान एक सरणी, लेकिन किसी कारण से यह लटक रहा है और मुझे नहीं पता कि इसे क्यों ठीक किया जाए या कैसे।
मैं अनिश्चित गहराई की सूचियों की एक सूची से निपट रहा हूं और उन्हें एक फ्लैट सूची में घनत्व की आवश्यकता है - for those curious its this question। लेकिन इस स्तर पर, बस कहें कि मुझे सूची में सभी तत्वों की एक विस्तृत सूची की आवश्यकता है, और 0 यदि यह एक सूची है।
for o in x:
if type(o)==type([]):x+=o
else:i+=o
print i
मैं इस सूची समझ का उपयोग कर तो जैसे छोटा करने के लिए, कोशिश कर रहा हूँ:
सामान्य विधि सूची के माध्यम से पुनरावृति करने के लिए और अगर इसकी एक सूची अंत में जोड़ने, तो तरह है।
print sum([
[o,x.append(o) or 0][type(o)==type([])]
for o in x
]))
अब, मैं List.append
रिटर्न नहीं पता है, कि मैं एक अंकीय मान पाने इतना सुनिश्चित करने के लिए, मैं आलसी मूल्यांकन x.append(o) or 0
कर सकते हैं कहते हैं, और के बाद से None
"falsy" है यह दूसरे भाग evaulate जाएगा और मूल्य है 0
।
लेकिन ऐसा नहीं है। अगर मैंने x.append()
को x
पर सूची समझ में डाल दिया है, तो यह तोड़ता है या त्रुटि नहीं करता है, या पुनरावृत्ति त्रुटि देता है, यह बस जम जाता है। सूची समझ के दौरान append
फ्रीज क्यों करता है, लेकिन ऊपर for
लूप ठीक काम करता है?
संपादित करें: हटाया जा रहा से इस सवाल रखने के लिए, मैं गोल्फ टिप्स के लिए नहीं देख रहा हूँ (वे हालांकि बहुत शैक्षिक कर रहे हैं), मैं क्यों कोड मैं के रूप में काम कर रहा था के रूप में एक जवाब के लिए देख रहा था इसे लिखा था
इस प्रश्न के लिए ऑफ-विषय, लेकिन मूल समस्या के लिए: क्या यह नेस्टेड में घोंसला वाले पुनरावर्तनीय को फ़्लैट करने के लिए आसान नहीं होगा (जिसे आप 3.3+ में 2-लाइन फ़ंक्शन में कर सकते हैं, एक 3-लाइन फ़ंक्शन बिना, यदि आप 'अधिक-itertools'' जैसे तृतीय-पक्ष मॉड्यूल का उपयोग नहीं कर सकते हैं, तो बस उस इटरेटर पर छोटा कोड लिखें? – abarnert
@barnert 'itertools आयात से *' 22 वर्ण लंबा है, तो आपको वास्तविक विधि को कॉल करने की आवश्यकता है। लाइब्रेरी के लिए भुगतान करने के लिए काफी कीमत है। –
'योग (मानचित्र (लैम्ब्डा x: x% 2-.5, flatten (ए))) 'केवल 37 वर्ण हैं। 22 + 1 + 37 = 60, जो निश्चित रूप से 73 है जो अब वहां है। – abarnert