क्या सूची बोध के साथ पुनरावृत्तियों की सूची को समतल करने का कोई आसान तरीका है, या इसे विफल करने के लिए, प्रदर्शन और पठनीयता को संतुलित करते हुए, आप सभी इस तरह की उथली सूची को समतल करने का सबसे अच्छा तरीका क्या मानेंगे?
मैंने नेस्टेड सूची समझ के साथ ऐसी सूची को समतल करने का प्रयास किया, जैसे:
>लेकिन मुझे वहांNameError
किस्म की परेशानी हो रही है, क्योंकि नाम "मेनूइटम" परिभाषित नहीं है
। गुगल करने और स्टैक ओवरफ्लो पर चारों ओर देखने के बाद, मुझे वांछित परिणाम एक reduce
कथन के साथ मिला: reduce(list.__add__, map(lambda x: list(x) ), list_of_menuitems))
लेकिन यह विधि काफी अपठनीय है क्योंकि मुझे उस list(x)
कॉल की आवश्यकता है क्योंकि x एक Django QuerySet है code> ऑब्जेक्ट।
निष्कर्ष:
इस प्रश्न में योगदान देने वाले सभी लोगों को धन्यवाद। मैंने जो सीखा उसका सारांश यहां दिया गया है। यदि अन्य लोग इन अवलोकनों को जोड़ना या ठीक करना चाहते हैं तो मैं इसे एक समुदाय विकी भी बना रहा हूं।
मेरा मूल कम कथन अनावश्यक है और इस तरह बेहतर लिखा गया है:
>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))
नेस्टेड लिस्ट कॉम्प्रिहेंशन के लिए यह सही सिंटैक्स है (शानदार सारांश dF!):
>>> [image for mi in list_of_menuitems for image in mi]
लेकिन इनमें से कोई भी तरीका उतना कारगर नहीं है जितना itertools.chain
:
>>> ; itertools से आयात श्रृंखला >>> सूची(श्रृंखला(*list_of_menuitems))
और @cdleary नोट्स के रूप में,
का उपयोग करके * ऑपरेटर जादू से बचने के लिए शायद यह बेहतर शैली है code>chain.from_iterable जैसे:
>>> चेन = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]]) >>> प्रिंट (सूची (श्रृंखला)) >>> [1, 2, 3, 5, 89, 6]