पायथन में बार-बार एकल आइटम की सूची बनाएँ
अपरिवर्तनीय वस्तुएँ
अपरिवर्तनीय वस्तुओं के लिए, जैसे कोई नहीं, बूल, इन्टस, फ्लोट्स, स्ट्रिंग्स, ट्यूपल्स या फ्रोज़ेन्सेट्स, आप इसे इस तरह से कर सकते हैं:
[e] * 4
ध्यान दें कि यह केवल सूची में अपरिवर्तनीय वस्तुओं (स्ट्रिंग्स, ट्यूपल्स, फ्रोज़ेन्सेट्स) के साथ उपयोग किया जाता है, क्योंकि वे सभी एक ही वस्तु को स्मृति में एक ही स्थान पर इंगित करते हैं। मैं अक्सर इसका उपयोग करता हूं जब मुझे सभी तारों के स्कीमा के साथ एक तालिका बनानी होती है, ताकि मुझे एक से एक मैपिंग के लिए अतिरेक न देना पड़े।
schema = ['string'] * len(columns)
म्यूटेबल आइटम
मैंने अब लंबे समय तक पायथन का उपयोग किया है, और मैंने कभी भी एक उपयोग-मामला नहीं देखा है जहां मैं एक उत्परिवर्ती उदाहरण के साथ ऊपर करूंगा। इसके बजाय, कहने के लिए, एक उत्परिवर्ती खाली सूची, सेट, या तानाशाही, आपको कुछ ऐसा करना चाहिए:
list_of_lists = [[] for _ in columns]
इस संदर्भ में अंडरस्कोर बस एक फेंकने योग्य परिवर्तनशील नाम है।
यदि आपके पास केवल संख्या है, तो यह होगा:
list_of_lists = [[] for _ in range(4)]
यह _
वास्तव में विशेष नहीं है, लेकिन आपकी कोडिंग पर्यावरण शैली चेकर शायद शिकायत करेगा यदि आप चर का उपयोग करने और किसी अन्य नाम का उपयोग करने का इरादा नहीं करते हैं।
उत्परिवर्तनीय वस्तुओं के साथ अपरिवर्तनीय विधि का उपयोग करने के लिए:
परिवर्तनशील वस्तुओं के साथ ऐसा करने से सावधान रहें , जब आप उनमें से किसी एक को बदलते हैं, तो वे सभी बदल जाते हैं क्योंकि वे सभी एक ही वस्तु हैं:
foo = [[]] * 4
foo[0].append('x')
फू अब रिटर्न:
[['x'], ['x'], ['x'], ['x']]
लेकिन अपरिवर्तनीय वस्तुओं के साथ, आप इसे काम कर सकते हैं क्योंकि आप संदर्भ बदलते हैं, न कि वस्तु:
>>> l = [0] * 4
>>> l[0] += 1
>>> l
[1, 0, 0, 0]
>>> l = [frozenset()] * 4
>>> l[0] |= set('abc')
>>> l
[frozenset(['a', 'c', 'b']), frozenset([]), frozenset([]), frozenset([])]
लेकिन फिर से, उत्परिवर्तित वस्तुएं इसके लिए अच्छी नहीं हैं, क्योंकि इन-प्लेस ऑपरेशंस ऑब्जेक्ट को बदलते हैं, संदर्भ नहीं:
l = [set()] * 4
>>> l[0] |= set('abc')
>>> l
[set(['a', 'c', 'b']), set(['a', 'c', 'b']), set(['a', 'c', 'b']), set(['a', 'c', 'b'])]