2015-02-08 7 views
5

कुल नोब सवाल यहाँ है लेकिन मैं वास्तव में जवाब जानना चाहता हूं।पाइथन ज़िप ऑब्जेक्ट के माध्यम से फिर से गायब होने के बाद गायब हो जाता है?

मुझे पता नहीं है कि ज़िप सूची ऑब्जेक्ट बस इसके गायब होने के बाद "गायब हो जाती है": उदाहरण के लिए।

>>> A=[1,2,3] 
>>> B=['A','B','C'] 
>>> Z=zip(A,B) 
>>> list(Z) 
>>> [('C', 3), ('B', 2), ('A', 1)] 
>>> {p:q for (p,q) in Z} 
{1: 'A', 2: 'B', 3: 'C'} 
>>> {p:q for (p,q) in list(Z)} 
{} 
>>> list(Z) 
[] 

(इस अजगर 3.4.2 में है)

किसी को भी मदद कर सकते हैं?

+1

'को Python2 में zip' एक सूची python3 में, जबकि एक iterator देता है। –

उत्तर

3

python3 करने को Python2 के बीच व्यवहार में बदलाव की थी:
को Python2 में, ज़िप रिटर्न एक list of tuples जबकि python3 में यह रिटर्न an iterator

इटरेटर की प्रकृति यह है कि एक बार यह डेटा पुन: सक्रिय करने के बाद - यह एक खाली संग्रह को इंगित करता है और यह वह व्यवहार है जिसे आप अनुभव कर रहे हैं।

को Python2:

Python 2.7.9 (default, Jan 29 2015, 06:28:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> A=[1,2,3] 
>>> B=['A','B','C'] 
>>> Z=zip(A,B) 
>>> Z 
[(1, 'A'), (2, 'B'), (3, 'C')] 
>>> list(Z) 
[(1, 'A'), (2, 'B'), (3, 'C')] 
>>> list(Z) 
[(1, 'A'), (2, 'B'), (3, 'C')] 
>>> list(Z) 
[(1, 'A'), (2, 'B'), (3, 'C')] 
>>> {p:q for (p,q) in Z} 
{1: 'A', 2: 'B', 3: 'C'} 
>>> Z 
[(1, 'A'), (2, 'B'), (3, 'C')] 
>>> Z 
[(1, 'A'), (2, 'B'), (3, 'C')] 

python3:

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 5 2014, 20:42:22) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> A=[1,2,3] 
>>> B=['A','B','C'] 
>>> Z=zip(A,B) 
>>> list(Z) 
[(1, 'A'), (2, 'B'), (3, 'C')] 
>>> list(Z) 
[] 
>>> 
+0

मैं यह भी पूछना चाहूंगा कि यह 'थकावट' व्यवहार बेहतर स्मृति दक्षता के लिए डिज़ाइन किया गया था या नहीं? –

+0

मुझे विश्वास है, हां: चूंकि शिमोन विसार ने अपने जवाब में सुझाव दिया है, 'सूची() 'के साथ' ज़िप()' को लपेटकर एक ही व्यवहार को हासिल करना बहुत आसान है। लेकिन जब आपको पूरे अनुक्रम में स्मृति में होने की आवश्यकता नहीं होती है - तो उस आइटम को त्यागना अधिक कुशल होता है जिसे हम पहले से ही पुनरावृत्त कर चुके हैं। – alfasin

3

zip परिणामों पर एक बार फिर से प्रयास करने के लिए एक वस्तु बनाता है। यह भी मतलब है कि यह एक यात्रा के बाद समाप्त हो रहा है:

>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> z = zip(a,b) 
>>> list(z) 
[(1, 4), (2, 5), (3, 6)] 
>>> list(z) 
[] 

आप zip(a,b) हर बार जब आप इसका इस्तेमाल करते हैं या list(zip(a,b)) परिणाम की दुकान और प्रयोग बार-बार के बजाय कि करना चाहते हैं कॉल करने के लिए की जरूरत है।

संबंधित मुद्दे