पायथन फ्लैटेन सूची: एक कैसे-करें गाइड
सूची को फ्लैट करना सूची से एक आयाम को हटाने की प्रक्रिया को संदर्भित करता है। एक आयाम सूची में किसी आइटम का पता लगाने के लिए आवश्यक एक अतिरिक्त निर्देशांक को संदर्भित करता है। आप सूची समझ, नेस्टेड फॉर लूप, या itertools.chain() विधि का उपयोग करके पायथन सूची को फ्लैट कर सकते हैं।
पायथन सूची में कई आयाम हो सकते हैं। इसका मतलब है कि आपके पास सूची के भीतर सूचियाँ हैं। इन सूचियों, जिन्हें कभी-कभी 'नेस्टेड सूचियाँ' कहा जाता है, को वापस एक नियमित सूची में बदला जा सकता है।
इसका मतलब है कि आप सूची के भीतर की सूचियों से सभी मानों को एक ही सूची में ले जा सकते हैं। सूची की सूचियों को सूची में बदलना "सूची को फ्लैट करना" कहलाता है।
पायथन फ्लैटेन सूची
पायथन सूची को फ्लैट करने के तीन तरीके हैं:
- सूची समझ का उपयोग करके।
- नेस्टेड फॉर लूप का उपयोग करके।
- itertools.chain() विधि का उपयोग करके।
इस गाइड में, हम सूची समझ, फॉर लूप, और itertools.chain() विधि का उपयोग करके सूची को फ्लैट करने के तरीके के बारे में बात करते हैं। हम दो उदाहरणों के माध्यम से चलते हैं ताकि आप अपने प्रोग्राम में सूचियों को फ्लैट करना शुरू कर सकें।
पायथन: सूची समझ का उपयोग करके सूची फ्लैट करें
पायथन सूची समझ मौजूदा सूची की सामग्री के आधार पर एक सूची को परिभाषित करती है। आप समझ के भीतर शर्तों या परिवर्तनों को निर्दिष्ट करके अपने नई सूची में जाने वाले प्रत्येक तत्व को अनुकूलित कर सकते हैं।
समझ फॉर लूप का उपयोग करके सूची पर पुनरावृति करने और नई सूची उत्पन्न करने के लिए सिंटैक्टिक शुगर हैं। इसका मतलब है कि वे मौलिक रूप से फॉर लूप के समान तरीके से काम करते हैं लेकिन अलग सिंटैक्स का उपयोग करते हैं।
सूची समझ के लिए सिंटैक्स यहां दिया गया है:
numbers = [1, 2, 3] new_numbers = [number * 2 for number in numbers]
यह समझ हमारी "numbers" सूची में प्रत्येक संख्या को 2 से गुणा करती है।
फ्लैट सूची: सूची समझ उदाहरण
हमारे पास सूचियों की एक सूची है जिसमें एक रेस्तरां में उपलब्ध विभिन्न सैंडविच फिलिंग्स हैं। वर्तमान में, हमारी सूचियों की सूची इस तरह दिखती है:
foods = [
["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"],
["Cheese", "Egg"],
["Ham", "Bacon", "Chicken Club", "Tuna"]
]
पहली सूची में शाकाहारी सैंडविच फिलिंग्स हैं; दूसरी सूची में शाकाहारी सैंडविच फिलिंग्स हैं; तीसरी सूची में वे सभी सैंडविच फिलिंग्स हैं जिनमें मांस है।
हम इस सूची को खाद्य पदार्थों की एकल सूची में बदलना चाहते हैं। एक आयाम वाली सूची के साथ काम करना दो आयाम वाली सूची के साथ काम करने से आसान है। इस सूची में एक से अधिक आयाम होने की कोई आवश्यकता नहीं है। हमारी सूची से दूसरे आयाम को हटाने के लिए, हम सूची समझ का उपयोग कर सकते हैं:
new_foods = [food for sublist in foods for food in sublist] print(new_foods)
यह सूची समझ "foods" पायथन वेरिएबल में प्रत्येक सूची पर पुनरावृति करती है। प्रत्येक मान को फिर मुख्य सूची में जोड़ा जाता है। एक बार हमारी सूची उत्पन्न हो जाने पर, हम इसे कंसोल पर प्रिंट करते हैं।
आइए अपना कोड चलाएं और देखें क्या होता है:
['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']
हमारी सूची की सूचियों को सफलतापूर्वक फ्लैट सूची में बदल दिया गया है। सभी सामग्रियां अब तीन के बजाय एक सूची के अंदर दिखाई देती हैं।
पायथन: नेस्टेड फॉर लूप का उपयोग करके सूची फ्लैट करें
हम एक नेस्टेड पायथन फॉर लूप का उपयोग करके भी यही परिणाम प्राप्त कर सकते हैं। "नेस्टेड फॉर लूप" "फॉर लूप के भीतर फॉर लूप" कहने का दूसरा तरीका है। हमारी सूची समझ निम्न फॉर लूप को दर्शाने का दूसरा तरीका है:
new_foods = []
for sublist in foods:
for food in sublist:
new_foods.append(food)
print(new_foods)
हमारा कोड मूल सूची की सूचियों में प्रत्येक सूची में प्रत्येक सूची आइटम पर पुनरावृति करने के लिए दो फॉर लूप्स का उपयोग करता है। आइए अपना कोड चलाएं:
['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']
हमारा प्रोग्राम हमारी सूची समझ के समान परिणाम लौटाता है। अधिकांश मामलों में, सूची समझ फॉर लूप की तुलना में बेहतर समाधान है। सूची समझ छोटी हैं और, इस मामले में, नेस्टेड फॉर लूप की तुलना में पढ़ने में आसान हैं।
पायथन: Itertools का उपयोग करके सूची फ्लैट करें
Itertools पायथन स्टैंडर्ड लाइब्रेरी में एक मॉड्यूल है। मॉड्यूल विधियों की एक श्रृंखला प्रदान करता है, जिससे इटरेबल ऑब्जेक्ट्स और जेनरेटर्स के साथ काम करना आसान हो जाता है।
हमारे उद्देश्यों के लिए, हम केवल chain() विधि का संदर्भ देते हैं। यह विधि सूची की सूचियों को स्वीकार करती है और एक फ्लैट सूची लौटाती है।
पायथन आयात कथन का उपयोग करके itertools मॉड्यूल को अपने कोड में आयात करके शुरू करें:
import itertools
अगला, सूची की सूचियों को परिभाषित करें और सूची को फ्लैट करने के लिए chain() विधि का उपयोग करें:
foods = [
["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"],
["Cheese", "Egg"],
["Ham", "Bacon", "Chicken Club", "Tuna"]
]
new_foods = itertools.chain(*foods)
हमारे कोड में, हम अपनी सूची को अनपैक करने के लिए * सिंबल का उपयोग करते हैं। यह हमारी सूची को फ़ंक्शन आर्गुमेंट्स में बदल देता है जिन्हें chain() विधि द्वारा पार्स किया जा सकता है।
chain() विधि एक itertools.chain ऑब्जेक्ट लौटाती है। हमारी फ्लैट सूची देखने के लिए, हमें इस ऑब्जेक्ट को सूची में बदलना होगा। हम list() विधि का उपयोग करके ऐसा करते हैं:
print(list(new_foods))
आइए अपना कोड निष्पादित करें:
['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']
हमारे कोड ने हमारी सूची को फ्लैट कर दिया है।
जबकि itertools सूची को फ्लैट करने का एक प्रभावी तरीका है, यह पिछले दो दृष्टिकोणों की तुलना में अधिक उन्नत है जिन पर हमने चर्चा की है।
ऐसा इसलिए है क्योंकि आपको अपने कोड में itertools आयात करना होगा जो एक नई निर्भरता पेश करता है। क्या अधिक है, chain() विधि में अनपैकिंग शामिल है जिसे समझना मुश्किल हो सकता है।
निष्कर्ष
आप सूची समझ, नेस्टेड फॉर लूप, और itertools.chain() विधि का उपयोग करके पायथन सूची को फ्लैट कर सकते हैं। सूची समझ सबसे "पायथनिक" विधि है और इसलिए अधिकांश मामलों में पसंद की जाती है।
जबकि नेस्टेड फॉर लूप प्रभावी हैं, वे सूची समझ की तुलना में कोड की अधिक लाइनों का उपभोग करते हैं। itertools.chain() विधि इसी तरह प्रभावी है लेकिन शुरुआती लोगों के लिए समझना मुश्किल हो सकता है।
आमतौर पर itertools जैसी नई लाइब्रेरी आयात करने की कोई आवश्यकता नहीं है — जब पायथन आपको सूची को फ्लैट करने के लिए आवश्यक सभी टूल्स देता है।
क्या आप पायथन के बारे में अधिक जानना चाहते हैं? हमारा संपूर्ण How to Learn Python गाइड देखें। आपको विशेषज्ञ सीखने की युक्तियाँ और शीर्ष पाठ्यक्रमों और पुस्तकों की एक सूची मिलेगी जिनसे आप सीख सकते हैं।