2013-07-21 5 views
7

अजगर 3.2.3 का उपयोग कर निष्क्रिय, अजगर शैलज़िप पहला प्रयोग के बाद चर खाली

t = (1,2,3) 
t2 = (5,6,7) 
z = zip(t,t2) 

for x in z : 
    print(x) 

परिणाम: (1,5) (2,6) (3,7)

बिल्कुल एक ही पाश कोड में लाना फिर पाश के लिए एक में जेड प्रदर्शित करने के लिए, के तुरंत बाद (ऊपर और अगले भाग के बीच कुछ नहीं कर रहे):

for x in z : 
    print(x) 

परिणाम: (खाली, कोई परिणाम के रूप में)

जेड अभी भी मौजूद है, के रूप में

<zip object at 0xa8d48ec> 

में

z 

परिणाम मैं भी टी पुन: असाइन कर सकते हैं, t2 फिर ज़िप किया जा करने के लिए है, लेकिन फिर यह केवल एक बार और केवल एक बार काम करता है।

क्या यह काम करना चाहिए? इस बारे में दस्तावेज़ http://docs.python.org/3.2/library/functions.html#zip में कोई उल्लेख नहीं है।

उत्तर

10

इस तरह यह पाइथन 3.x में काम करता है। Python2.x में, zip tuples की एक सूची लौटा, लेकिन python3.x के लिए, zipitertools.izip व्यवहार करता है जैसे python2.x में व्यवहार किया जाता है। python2.x व्यवहार फिर से प्राप्त करने के लिए, बस zip के उत्पादन से सूची का निर्माण:

z = list(zip(t,t2)) 

ध्यान दें कि python3.x में, निर्मित कार्यों का एक बहुत अब iterators सूची (map, zip से लौटने के बजाय, filter)

6

क्योंकि zip पायथन 3.x में एक पुनरावर्तक देता है। आप इसे फिर से उपयोग करना चाहते हैं, तो यह एक list पहले:

z = list(zip(t, t2)) 
+0

इटरेटर, जनरेटर नहीं। – user2357112

+0

@ user2357112 ty ... –

3

zip पुनरावर्तक रिटर्न (अजगर 3 में)। आप केवल एक बार फिर एक इटरेटर पर फिर से शुरू कर सकते हैं। जब यह तत्वों से बाहर होता है तो इटेटरेटर गायब नहीं होता है, लेकिन फिर से इसे फिर से 0 तत्व देता है। यदि आप एक सूची चाहते हैं, तो list पर कॉल करें:

z = list(zip(t, t2)) 
संबंधित मुद्दे