के बजाय zip
का उपयोग करना बेहतर है?आईज़िप के बजाय ज़िप का उपयोग करना बेहतर क्यों है?
उत्तर
जब आप जानते हैं कि आप निर्मित वस्तुओं की पूरी सूची चाहते हैं (उदाहरण के लिए, उस फ़ंक्शन को पास करने के लिए जो उस सूची को संशोधित करेगा)। या जब आप तर्कों को मजबूर करना चाहते हैं तो आप उस विशिष्ट बिंदु पर पूरी तरह से मूल्यांकन करने के लिए zip()
पर जा रहे हैं।
क्या पहले मामले में आईज़िप का उपयोग करना बेहतर नहीं होगा क्योंकि यह तेजी से ट्यूबल का उपयोग करता है और इज़िप का उपयोग न करने का कोई वास्तविक कारण नहीं है? – user1815201
@ user1815201: 'izip' केवल' tuple' का उपयोग करता है अगर अगले पुनरावृत्ति से पहले 'tuple' जारी किया गया था, तो यह आपको कुछ भी प्राप्त नहीं करता है। उस ने कहा, कोई भी नुकसान भी मामूली है, इसलिए मैं मानता हूं कि 'izip' का उपयोग न करने का कोई कारण नहीं है, यदि आपको' सूची 'की आवश्यकता है तो' सूची 'के साथ लपेटना; आप वास्तव में 'भविष्य_बिल्टिन आयात ज़िप' से पी 2 कोड में जोड़कर "उचित" तरीका कर सकते हैं, जो सादे 'ज़िप' को 'izip' (पीई 3 संक्रमण की तैयारी) में बनाता है। – ShadowRanger
2.x में, जब आप को एक पुनरावर्तक की बजाय एक सूची की आवश्यकता है।
क्या आप मुझे एक उदाहरण दे सकते हैं जहां ऐसा हो सकता है? –
वास्तव में नहीं। यही कारण है कि मैं 'itertools.izip()' को प्राथमिकता देता हूं, सिवाय इसके कि लाभ पूरी तरह से सांख्यिकीय होगा। –
एक मामला, जब आपको किसी सूची की आवश्यकता होती है, तो जब आप इंडेक्स द्वारा परिणाम के आइटम तक पहुंचने की योजना बनाते हैं या कुल लंबाई ढूंढने की आवश्यकता होती है। 'lst = ज़िप (lst_a, lst_b)' 'lst [1]' या 'len (lst)' की अनुमति देता है। हालांकि, 'ilst = itertools.izip (lst_a, lst_n) के लिए 'आप' [1]' या 'len (ilst)' की कोशिश करने में असफल हो जाएंगे। –
zip
एक ही समय में सभी सूची की गणना करता है, izip
केवल अनुरोध किए जाने पर तत्वों की गणना करता है।
>>> l1 = [1, 2, 3, 4, 5, 6]
>>> l2 = [2, 3, 4, 5, 6, 7]
>>> z = zip(l1, l2)
>>> iz = izip(l1, l2)
>>> isinstance(zip(l1, l2), list)
True
>>> isinstance(izip(l1, l2), list)
False
>>> z[::2] #Get odd places
[(1, 2), (3, 4), (5, 6)]
>>> iz[::2] #Same with izip
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'itertools.izip' object is unsubscriptable
:
एक महत्वपूर्ण अंतर 'izip' एक 'izip वस्तु' है, जो एक सूची नहीं है और (जैसे अनुक्रमण के रूप में) सूची विशिष्ट सुविधाओं का समर्थन नहीं करता है देता है, कि 'जिप' एक वास्तविक सूची लौटाता है
तो, यदि आपको किसी सूची की आवश्यकता है (कोई सूची जैसी वस्तु नहीं है), तो बस 'ज़िप' का उपयोग करें।
इसके अलावा, 'izip' स्मृति या चक्रों को बचाने के लिए उपयोगी हो सकता है।
उदा। निम्नलिखित कोड कुछ चक्रों के बाद बाहर निकल सकते हैं, तो संयुक्त सूची की सभी वस्तुओं की गणना करने की जरूरत नहीं है:
lst_a = ... #list with very large number of items
lst_b = ... #list with very large number of items
#At each cycle, the next couple is provided
for a, b in izip(lst_a, lst_b):
if a == b:
break
print a
zip
का उपयोग कर गणना की है | सभी(a, b)
जोड़ों चक्र प्रवेश करने से पहले।
इसके अलावा, यदि lst_a
और lst_b
बहुत बड़े हैं (उदाहरण के लाखों रिकॉर्ड), zip(a, b)
डबल स्पेस के साथ तीसरी सूची तैयार करेगा।
लेकिन यदि आपके पास छोटी सूचियां हैं, तो शायद zip
तेज है।
धन्यवाद। हालांकि, यह मुख्य रूप से उत्तर देता है जब 'izip'' ज़िप 'से बेहतर होता है ... –
आप सही हैं। मैंने अच्छे इरादे से शुरुआत की और फिर सैद्धांतिक सामान में गिर गया ... – Don
इटर्टोल्स लाइब्रेरी सामान्य पायथन कार्यों के लिए "इटरेटर" प्रदान करता है। Itertools दस्तावेज़ों से, "ज़िप की तरह() को छोड़कर कि यह एक सूची के बजाय एक पुनरावर्तक देता है।" आईज़िप (i) में I का मतलब है "पुनरावर्तक"।
पायथन इटरेटर्स एक "आलसी लोड" अनुक्रम है जो नियमित रूप से स्मृति सूची में स्मृति बचाता है। तो, आप itertools.izip (ए, बी) का उपयोग करेंगे जब दो इनपुट ए, बी एक समय में स्मृति में रखने के लिए बहुत बड़े हैं।
कुशल अनुक्रमिक प्रसंस्करण से संबंधित अजगर अवधारणाओं को फिर से देखें: अभी तक
"generators" & "yield"
"iterators"
"lazy loading"
अच्छी तरह से समझाया। –
- 1. filter_input() का उपयोग करना बेहतर क्यों है?
- 2. ग्लिब डेटा प्रकारों का उपयोग करना बेहतर क्यों है (उदा। `Int` के बजाय 'gint`)?
- 3. reinterpret_cast के बजाय static_cast का उपयोग करना क्यों महत्वपूर्ण है?
- 4. मुझे जीडब्ल्यूटी के बजाय jQuery का उपयोग क्यों करना चाहिए?
- 5. रीडोनली गुण छंद कार्यों का उपयोग करना बेहतर क्यों है?
- 6. आप strcpy के बजाय strncpy का उपयोग क्यों करना चाहिए?
- 7. त्रुटि कोड लौटने के बजाय अपवाद फेंकना बेहतर क्यों है?
- 8. यह बेहतर क्यों है (वापसी सूची के बजाय वापसी IList)?
- 9. क्या 'ऑब्जेक्ट कॉन्टेक्स्ट' के बजाय 'डीबीकॉन्टेक्स्ट' का उपयोग करना हमेशा बेहतर होता है?
- 10. डेल्फी से 7-ज़िप का उपयोग करना?
- 11. डेटा सदस्यों को पॉइंटर्स के बजाय संदर्भ के रूप में स्टोर करना बेहतर क्यों है?
- 12. क्यों memo.Lines TStringList के बजाय TStrings का उपयोग करता है?
- 13. url.getContent की बजाय url.openStream का उपयोग क्यों करना चाहिए?
- 14. स्ट्रिंग के बजाय char [] का उपयोग क्यों करें?
- 15. ओपनजीएल रेडियंस के बजाय डिग्री का उपयोग क्यों करता है?
- 16. कार्यों के बजाय कन्स्ट्रक्टर का उपयोग क्यों किया जाता है?
- 17. आरटीपी टीसीपी के बजाय यूडीपी का उपयोग क्यों करता है?
- 18. कोको विरासत के बजाय प्रतिनिधियों का उपयोग क्यों करता है?
- 19. रुबी प्रतिक्रिया_to का उपयोग क्यों करता है? responds_to के बजाय?
- 20. क्या सूची या संग्रह का उपयोग करना बेहतर है?
- 21. मैवेन सभी समायोजनों के खिलाफ जेडीके के बजाय जेआरई 7 का उपयोग क्यों करना चाहता है?
- 22. क्या मुझे MySQL के बजाय NoSQL का उपयोग करना चाहिए?
- 23. एसओएपी आधारित सेवाओं के बजाय आरईएसटी का उपयोग क्यों करेगा?
- 24. अंतिम चर के बजाय समान स्ट्रिंग अक्षर का उपयोग करना?
- 25. मुझे हैश के बजाय ओपनस्ट्रक्चर का उपयोग कब करना चाहिए?
- 26. अन्य तरीकों के बजाय कर्ल का उपयोग क्यों करें?
- 27. मुझे एक प्रकार के बजाय var का उपयोग क्यों करना चाहिए?
- 28. मुझे इनलाइन के बजाय __forceinline का उपयोग कब करना चाहिए?
- 29. मुझे [ProtoInclude] का उपयोग क्यों करना है?
- 30. पर्ल में चेतावनी के बजाय मुझे कार्प का उपयोग क्यों करना चाहिए?
एक 'zip' के पक्ष में हो, बहुत स्पष्ट अभी भी उनका कहना है लायक, कि' izip' रिटर्न एक 'iterator' है जो कर सकते हैं केवल एक बार घुमाया जा सकता है। यानी 'ii = izip (ए, बी) में; एफ (ii); जी (ii) ', यहां एक खाली सूची' [] '' g' को पास कर दी गई है। – Causality