Kodokon kodokon.com

लिस्ट और डिक्शनरी कॉम्प्रिहेंशन

अपने डेटा को रूपांतरित करने, छानने और दोबारा इंडेक्स करने के लिए, निर्माण करने वाले अपने लूप को अभिव्यंजक कॉम्प्रिहेंशन से बदलें।

8 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

एक लिस्ट कॉम्प्रिहेंशन प्रोग्रामिंग के सबसे आम पैटर्न को संक्षिप्त कर देती है: किसी अनुक्रम को रूपांतरित या छानकर एक लिस्ट बनाना। इसकी वाक्य-रचना एक वाक्य की तरह पढ़ी जाती है: [expression for element in sequence if condition]append वाले लूप जैसा ही परिणाम, एक ही घोषणात्मक लाइन में, जिसे हर Python डेवलपर तुरंत पहचान लेता है।

PYTHON
prices = [12.0, 49.9, 5.5, 199.0]

with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]

print(with_tax)  # [14.4, 59.88, 6.6, 238.8]
print(cheap)     # [12.0, 49.9, 5.5]
व्यंजक से रूपांतरित करें, अंत में लगे if से छानें।

डिक्शनरी कॉम्प्रिहेंशन {key: value for ...} वाक्य-रचना के साथ उसी तर्क का पालन करती है। प्रोजेक्ट में एक बहुत आम उपयोग: ऑब्जेक्ट की किसी लिस्ट को उनके पहचानकर्ता से दोबारा इंडेक्स करना, ताकि हर बार कुछ चाहिए होने पर पूरी लिस्ट छानने के बजाय तत्काल खोज मिल सके।

PYTHON
users = [
    {"id": 7, "name": "Alice"},
    {"id": 12, "name": "Bruno"},
    {"id": 31, "name": "Chloe"},
]

by_id = {u["id"]: u["name"] for u in users}
print(by_id[12])    # Bruno
print(31 in by_id)  # True
पहचानकर्ता से दोबारा इंडेक्स करना: पेशेवर कोड का एक क्लासिक।

if के लिए दो स्थान, दो अलग-अलग भूमिकाएँ। for के बाद रखा जाए, तो यह छानता है: अस्वीकृत तत्व परिणाम में दिखाई नहीं देते। for के पहले रखा जाए, एक शर्त-व्यंजक (a if condition else b) के रूप में, तो यह हर तत्व के लिए एक वैल्यू चुनता है: तब लिस्ट की लंबाई स्रोत जितनी ही रहती है।

PYTHON
scores = [45, 82, 67, 91]

labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels)  # ['fail', 'pass', 'pass', 'pass']
शर्त-व्यंजक हर तत्व को बिना किसी को हटाए रूपांतरित करता है।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. [x * 2 for x in data if x > 0] में, if की भूमिका क्या है?
    • यह हर तत्व के लिए दो वैल्यू के बीच चुनाव करता है
    • यह छानता है: केवल धनात्मक तत्व रखे जाते हैं
    • यह पहले ऋणात्मक तत्व पर कॉम्प्रिहेंशन रोक देता है
  2. {n: n * n for n in range(3)} क्या उत्पन्न करता है?
    • {0: 0, 1: 1, 2: 4}
    • {1: 1, 2: 4, 3: 9}
    • [0, 1, 4]
    • {0, 1, 4}
  3. किसी कॉम्प्रिहेंशन को क्लासिक लूप से बदलना कब बेहतर होता है?
    • जब तर्क जटिल या नेस्टेड हो जाए
    • जैसे ही लिस्ट सौ तत्वों से अधिक हो जाए
    • कभी नहीं, कॉम्प्रिहेंशन हमेशा बेहतर है