2010-03-28 3 views
8

कई unpacking असाइनमेंट की पाठ्यपुस्तक उदाहरण नहीं जानते हैं की तरह कुछ:अजगर में एकाधिक Unpacking असाइनमेंट जब आप अनुक्रम लंबाई

import numpy as NP 
M = NP.arange(5) 
a, b, c, d, e = M 
# so of course, a = 0, b = 1, etc. 

M = NP.arange(20).reshape(5, 4)  # numpy 5x4 array 
a, b, c, d, e = M 
# here, a = M[0,:], b = M[1,:], etc. (ie, a single row of M is assigned each to a through e) 

(मेरे क्यू नहीं numpy specfic है, वास्तव में, मैं एक शुद्ध पसंद करेंगे अजगर समाधान)

डब्ल्यू/आर/कोड का टुकड़ा मैं अब पर देख रहा हूँ टी, मैं कि सीधा परिदृश्य पर दो जटिलताओं देखें:।

  • मैं आमतौर पर के आकार पता नहीं चलेगा एम; और

  • मैं आइटम (निश्चित रूप से सभी वस्तुओं से भी कम) और की एक निश्चित संख्या मैं 5x4 करने के लिए

तो वापस एक एकल कंटेनर में शेष रखना चाहते हैं खोल करना चाहते हैं उपर्युक्त सरणी, जो मैं करने में सक्षम होना चाहता हूं, उदाहरण के लिए, क्रमशः एम, ए, बी, और सी के पहले तीन पंक्तियों को निर्दिष्ट करें (बिल्कुल ऊपर) और शेष पंक्तियां (मेरे पास है कोई कंटेनर नहीं है, बस कुछ सकारात्मक पूर्णांक होगा), all_the_r est = []।

मुझे यकीन नहीं है कि मैंने इसे स्पष्ट रूप से समझाया है; किसी भी घटना में, अगर मुझे फीडबैक मिलता है तो मैं तुरंत अपना प्रश्न संपादित कर दूंगा।

उत्तर

16

अजगर 3.x आसानी से कर सकते हैं:

(a, b), c = someseq[:2], someseq[2:] 
+1

आपका 2.x समाधान काम नहीं करता है। सामान जो आप अनपॅक कर रहे हैं वह मेल नहीं खाता है। –

+2

2.x समाधान को ठीक करने के लिए, जो कुछ आवश्यक है वह ए और बी के चारों ओर एक कंस्ट्रैसिस है, ताकि मिलानों को आवंटित करने के लिए मानों की संख्या हो। i.e. '(ए, बी), सी = someseq [: 2], someseq [2:]' – mjv

7

इस के लिए सिंटेक्स अजगर से 3

>>> # Python 3.x only 
>>> a, b, *c = range(10) 
>>> a 
0 
>>> b 
1 
>>> c 
[2, 3, 4, 5, 6, 7, 8, 9] 
जोड़ा जाता है:

a, b, *c = someseq 

पायथन 2.x में थोड़ा और अधिक काम करने की जरूरत

लेकिन पाइथन 2 में कोई समान समाधान मौजूद नहीं है।

आप निश्चित रूप से

>>> s = range(10) 
>>> s 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> (a, b, c), rest = s[0:3], s[3:] 
>>> a 
0 
>>> b 
1 
>>> c 
2 
>>> rest 
[3, 4, 5, 6, 7, 8, 9] 

या अन्य समान समाधान कर सकते हैं।

+0

एक अजगर 2 समाधान है (अन्य जवाब देखें) - इसलिए डाउनवोट। –

+0

अन्य पद से पायथन 2 समाधान मेरे जैसा ही है ... –

+0

सहमत - लेकिन जब आप कहते हैं कि पाइथन 2 में कोई समान समाधान नहीं है तो यह भ्रमित है - मैं सुझाव दूंगा कि पाइथन में एक समान समाधान है 2, लेकिन वाक्यविन्यास भिन्न है और यह थोड़ा कम "स्वचालित" है। –