2008-12-01 5 views
7

असल में, मैं दो पुनरावृत्तियों के "कार्टेशियन उत्पाद" पर एक सूची समझ बनाना चाहता हूं। निम्नलिखित Haskell code के बारे में सोचो:पायथन में, क्या एकाधिक इटरेटर के साथ सूची समझ का उपयोग करने का एक संक्षिप्त तरीका है?

[(i,j) | i <- [1,2], j <- [1..4]] 

जो पैदावार

[(1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(2,3),(2,4)] 

मैं एक संक्षिप्त तरीके से अजगर में एक समान व्यवहार प्राप्त कर सकते हैं?

उत्तर

14

क्या आप इसके बारे में पूछ रहे हैं?

[ (i,j) for i in range(1,3) for j in range(1,5) ] 
+0

हाँ महोदय, मैं इसके लिए पूछ रहा था। मुझे नहीं पता था कि यह संभव था और उपयोग करने के लिए क्या वाक्यविन्यास, धन्यवाद। –

+0

मीठा! मैं पूरी तरह से इस सुविधा को याद किया था। –

2

यह तुम क्या वर्णन करने के लिए लगता है:

[[क, ख] रेंज (1,5) में ख के लिए रेंज (1,3) में एक के लिए]

अद्यतन: drat! पोस्ट करने से पहले एसएलॉट के जवाब को देखने के लिए पृष्ठ को पुनः लोड करना चाहिए था। हमम ... थोड़ा मूल्य जोड़ने के लिए क्या करना है? शायद पाइथन के साथ इंटरैक्टिव मोड की उपयोगिता की एक छोटी सी गवाही।

मैं हाल ही में पर्ल के साथ पृष्ठभूमि से आया हूं, इस तरह के मुद्दों के साथ मुझे कमांड लाइन पर "पायथन" टाइप करना और इंटरैक्टिव मोड में ड्रॉप करना बहुत उपयोगी लगता है और केवल ए) चीजों को आजमाने की कोशिश करना शुरू करें, और बी) परिष्कृत करें नस्लों को ऊपर-तीर मारकर और मेरे पिछले प्रयास को समायोजित करके जब तक मैं जो चाहता हूं उसे प्राप्त न करें। किसी भी समय मैं कुछ खोजशब्दों पर आलसी हूं, मदद हाथ में है। बस टाइप करें: मदद ("some_keyword"), संक्षिप्त सारांश पढ़ें, फिर "क्यू" दबाएं और मैं पाइथन दुभाषिया के साथ सीधे बातचीत में लाइन पर वापस आ गया हूं।

अनुशंसित अगर आप एक नौसिखिया हैं और इसका उपयोग नहीं कर रहे हैं।

7

कार्टेशियन उत्पाद itertools module (2.6 में) में है।

>>> import itertools 
>>> list(itertools.product(range(1, 3), range(1, 5))) 
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4)] 
4

नेस्टेड समझ के बारे में मज़ेदार तथ्य: यह छोरों "के लिए" नेस्टेड की नकल करता है, तो भीतरी लोगों बाहरी लोगों से मूल्यों का उपयोग कर सकते हैं। यह कार्टेशियन उत्पाद मामले में उपयोगी नहीं है, लेकिन जानना अच्छा है। उदाहरण के लिए:

[ (i,j) for i in range(10) for j in range(i) ] 

सभी जोड़ों को (i,j) जहां 0>=i>j>10 उत्पन्न करता है।

+0

और भी दिलचस्प। धन्यवाद! –

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