कई अवसरों पर मैं लघु-सर्किटिंग सूची समझ या जनरेटर अभिव्यक्तियों के लिए पायथन वाक्यविन्यास चाहता था।लघु-सर्किटिंग सूची समझ
my_list = [1, 2, 3, 'potato', 4, 5]
[x for x in my_list if x != 'potato']
result = []
for element in my_list:
if element != 'potato':
result.append(element)
वहाँ एक समझ जो कम सर्किट के लिए भाषा का में समर्थन नहीं है:
यहाँ एक सरल सूची समझ, और अजगर में लूप के लिए बराबर है। प्रस्तावित वाक्य रचना, और अजगर में लूप के लिए बराबर:
[x for x in my_list while x != 'potato']
# --> [1, 2, 3]
result = []
for element in my_list:
if element != 'potato':
result.append(element)
else:
break
यह अनंत दृश्यों सहित मनमाना iterables, साथ काम करना चाहिए, और अभिव्यक्ति वाक्य रचना जनरेटर के लिए लचीला होना। मैं list(itertools.takewhile(lambda x: x != 'potato'), my_list)
एक विकल्प के रूप के बारे में पता कर रहा हूँ, लेकिन:
- यह विशेष रूप से pythonic नहीं है - थोड़ी देर समझ
- के रूप में कुशल या तेजी से एक CPython समझ के रूप में यह शायद नहीं हो सकता के रूप में के रूप में पढ़ने योग्य नहीं
- यह आउटपुट को बदलने के लिए एक अतिरिक्त कदम की आवश्यकता होती है, जबकि इसे सीधे समझ में रखा जा सकता है, उदाहरण के लिए
[x.lower() for x in mylist]
- यहां तक कि original author doesn't seem to like it much।
मेरा प्रश्न है, वहाँ कारण है कि यह एक अच्छा विचार उपयोग के इस मामले को व्याकरण का विस्तार करने में नहीं है, या यह सिर्फ संभव नहीं है क्योंकि अजगर देव लगता है कि यह शायद ही कभी उपयोगी होगा के बारे में कोई सैद्धांतिक शिकन थी? यह भाषा के लिए एक सरल जोड़ और एक उपयोगी विशेषता की तरह लगता है, लेकिन शायद मैं कुछ छिपी हुई subtleties या जटिलताओं को देख रहा हूँ।
'परिणाम = []; my_list में x के लिए कोई भी (x == 'आलू' या परिणाम .append (x)) '। हम्म ... नहीं, मुझे लगता है कि यह लेने से भी बदतर है :) –
मुझे लगता है कि आपको [python-dev] में एक अच्छा जवाब मिलने की अधिक संभावना है (http://mail.python.org/mailman/listinfo/python- देव) मेलिंग सूची। – Elazar
@gnibbler: आपने अभी 'फ़िल्टरफल्से' लागू किया है, ओपी पहले 'आलू' के बाद सभी संलग्नक को रोकना चाहता है। कोशिश करें: 'मिला = []; परिणाम = []; कोई भी (x == 'आलू' और नहीं मिला। अनुलग्नक (x) या result.append (x) यदि नहीं मिला तो my_list में x के लिए कोई नहीं) ' – PaulMcG