2012-03-22 15 views
11

क्या एक से अधिक सूची में सूची समझने का कोई स्मार्ट तरीका है?एक सूची में कई सूचियों के पायथन मूल्य

मुझे पता है कि मैं इंडेक्स के रूप में एक अलग श्रेणी सूची का उपयोग कर सकता हूं लेकिन इस तरह मुझे लंबाई जाननी है (या इसे len() फ़ंक्शन कॉल के साथ अलग से प्राप्त करें)।

>>> a = range(10) 
>>> b = range(10, 0, -1) 
>>> [(a[x],b[x]) for x in range(10)] 
[(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)] 

मैं कुछ इस तरह हमें खुशी होगी:

>>> [(a,b) for a in range(10) and b in range(10, 0, -1)] 
[(0, 10), (1, 9), (2, 8), (3, 7), (4, 6), (5, 5), (6, 4), (7, 3), (8, 2), (9, 1)] 

कैसे आप सूची समझ लिखना चाहते हैं? क्या Itertools के साथ ऐसा करने का कोई तरीका है?

रेंज सूची बस किसी भी सूची के लिए खड़े हैं और मैं नहीं है जरूरी एक टपल प्राप्त करना चाहते हैं। एक ऐसा फ़ंक्शन भी हो सकता है जो पैरामीटर के रूप में ए और बी लेता है। तो ज़िप वह नहीं है जो मैं चाहता हूं।

अद्यतन: "तो ज़िप वह नहीं है जो मैं चाहता हूं।" मैं का मतलब है कि मैं zip(range(10), range(10, 0, -1))

+0

[9184497] का डुप्लिकेट (http://stackoverflow.com/questions/9184497/python-list-comprehension-function-with- तर्क-इन-दो सूचियां)? – quazgar

उत्तर

20

नहीं करना चाहती आपका उदाहरण सिर्फ है:

zip(range(10), range(10, 0, -1)) 

आम तौर पर, आप zip का उपयोग कर iterables के किसी सेट में शामिल हो सकते:

[func(a, d, ...) for a, b, ..., n in zip(iterable1, iterable2, ..., iterableN)] 
+1

दूसरा समाधान वह है जो मैं चाहता हूं। बहुत बहुत धन्यवाद। – dominik

+0

आप ['itertools.izip'] (http://docs.python.org/library/itertools.html#itertools.izip) पर विचार करना चाहेंगे क्योंकि यह बड़े अनुक्रमों में बेहतर है। वही विचार, बस थोड़ा अलग उपकरण। –

+0

मुझे लगता है कि आप ए, बी, ..., एन में ज़िप (iterable1, iterable2, ..., iterableN) के लिए '[func (a, b, ...) लिखने के लिए हो सकता है] ' –

1

आप लागू करना चाहते हैं कई अनुक्रमों के लिए एक फ़ंक्शन, आपको map या itertools.imap:

map(lambda *x: sum(x), range(10), range(10, 0, -1), range(0,20, 2)) 
की आवश्यकता है

जब तक आप सूची समझ में अपनी मैपिंग करना पसंद नहीं करते हैं तब तक ज़िप करने की कोई आवश्यकता नहीं है

+0

यह नहीं है वह क्या चाहता है। अपना दूसरा उदाहरण देखें - वह 'ज़िप' करना चाहता है। और आपको कभी भी 'मानचित्र' की आवश्यकता नहीं है, एक सूची समझ/जनरेटर अभिव्यक्ति वह सब कुछ कर सकती है जो इसे और अधिक कर सकती है। – agf

+1

@agf "एक ऐसा फ़ंक्शन भी हो सकता है जो पैरामीटर के रूप में ए और बी लेता है। इसलिए ज़िप मैं नहीं चाहता हूं।" आप तर्क दे सकते हैं कि किसी को भी ज़िप की आवश्यकता नहीं है, क्योंकि नक्शा उपलब्ध है। – Marcin

+0

उन्होंने लिखा कि इससे पहले कि मैंने अपना दूसरा उदाहरण जोड़ा, दिखा रहा है कि 'ज़िप' के साथ फ़ंक्शन का उपयोग कैसे करें। मैंने इसे जोड़ने के बाद लिखे गए मेरे उत्तर पर अपनी टिप्पणी पढ़ें। उनका मतलब था कि वह _just_ 'ज़िप 'नहीं चाहते थे, न कि वह' ज़िप 'बिल्कुल नहीं चाहते थे। – agf