2025, Sep 24 09:33
Python में ट्यूपल्स की सूची को उपयोगकर्ता-अनुकूल तरीके से प्रिंट करें
Python में ट्यूपल्स की सूची को पढ़ने योग्य बनाएं: इटरेट करें, अनपैक, f-string से फॉर्मेट करें, enumerate से नंबरिंग जोड़ें और आउटपुट को साफ़ रखें.
Python में ट्यूपल्स की सूची को उपयोगकर्ता-अनुकूल तरीके से प्रिंट करना
(subject, mark) जैसी ट्यूपल-आधारित सूची के साथ काम करना आम है, लेकिन पूरी सूची को सीधे stdout पर छाप देना पढ़ने में सहज नहीं होता। अगर आप सूची को वैसा ही print कर देते हैं, तो साफ, इंसानी-पढ़ने योग्य रिपोर्ट के बजाय ट्यूपल का सिंटैक्स दिखता है। आइए उस न्यूनतम बदलाव को देखें जो आधारभूत डेटा संरचना या लॉजिक बदले बिना आउटपुट को स्पष्ट कर देता है।
समस्या का उदाहरण
डेटा (subject, mark) जोड़ियों की सूची के रूप में रखा गया है। मौजूदा print फ़ंक्शन सूची ऑब्जेक्ट को सीधे आउटपुट करता है, इसलिए Python ट्यूपल्स का डिफ़ॉल्ट प्रतिनिधित्व दिखता है।
entries = [('English', 78), ('Mathematics', 99)]
def show_report():
    print(entries)
show_report()
यह कुछ ऐसा प्रिंट करता है:
[('English', 78), ('Mathematics', 99)]
यह तकनीकी रूप से सही है, लेकिन उपयोगकर्ता-अनुकूल नहीं।
समस्या कहाँ है
किसी सूची या स्ट्रिंग पर range के साथ इटरेट करने की कोशिश करने पर TypeError आता है, क्योंकि range एक पूर्णांक चाहता है, सूची नहीं। Python में प्रचलित तरीका है कि सीधे iterable पर इटरेट किया जाए। चूँकि सूची का हर आइटम एक ट्यूपल है, इटरेशन के दौरान उसे दो चर में अनपैक करना सुविधाजनक रहता है।
सामान्य रूप बिल्कुल सीधा है: for item in iterable:. इसे ट्यूपल्स की सूची पर लागू करने से आप चलते-चलते मानों को अनपैक कर सकते हैं।
समाधान: इटरेट करें, अनपैक करें, फॉर्मेट करें
सूची पर इटरेट करें, हर (subject, mark) जोड़ी को अनपैक करें, और स्पष्टता के लिए f-string से फॉर्मेट करें। इससे डेटा मॉडल और समग्र व्यवहार जस का तस रहता है, जबकि प्रदर्शित आउटपुट बेहतर हो जाता है।
entries = [('English', 78), ('Mathematics', 99)]
def show_report():
    for topic, score in entries:
        print(f"{topic} => {score}")
show_report()
आउटपुट संक्षिप्त और पठनीय हो जाता है:
English => 78
Mathematics => 99
enumerate के साथ वैकल्पिक इंडेक्सिंग
यदि आपको पंक्ति नंबर चाहिए, तो enumerate इटरेशन के दौरान हर आइटम को एक इंडेक्स देता है। जब आउटपुट में स्थितिगत संदर्भ चाहिए होता है, यह उपयोगी है। अनपैकिंग पहले की तरह ही काम करती है, और आप गिनती 1 से शुरू कर सकते हैं।
entries = [('English', 78), ('Mathematics', 99)]
def show_report_numbered():
    for idx, (topic, score) in enumerate(entries, start=1):
        print(f"{idx}. For subject {topic} the mark is {score}")
show_report_numbered()
इसके बाद आउटपुट में नंबरिंग भी शामिल होगी:
1. For subject English the mark is 78
2. For subject Mathematics the mark is 99
यह क्यों मायने रखता है
पठनीय आउटपुट से रोज़मर्रा के काम—जैसे त्वरित जाँच, डेमो, और कंसोल-आधारित वर्कफ़्लो—कम झंझट वाले बनते हैं। किसी iterable पर सीधे इटरेट करना और ट्यूपल अनपैकिंग ऐसे बुनियादी औज़ार हैं जो आम त्रुटियों से बचाते हैं, कोड को संक्षिप्त रखते हैं, और परिणामों को तेजी से स्कैन करने योग्य बनाते हैं।
निष्कर्ष
जब आप संबंधित मानों को ट्यूपल्स में रखते हैं, तो सूची पर इटरेट करें और लूप के भीतर ही जोड़ी को अनपैक करें। f-string के साथ मिलाकर आउटपुट को साफ ढंग से फॉर्मेट करें। यदि स्थितिगत जानकारी चाहिए, तो enumerate एक सरल विस्तार है जो बिना डेटा या कंट्रोल फ्लो बदले इंडेक्स जोड़ देता है।
यह लेख StackOverflow के प्रश्न (पूछने वाले PCuser2009) और anatolyg के उत्तर पर आधारित है।