2012-11-18 11 views
15

में अज्ञात संख्या में घोंसला वाले लूपों पर इटरेट करना मेरे पास उपयोगकर्ता द्वारा परिभाषित सूचियों की एक चर संख्या है, जिनमें प्रत्येक शब्द हैं। उदाहरण के लिए, वहाँ तीन सूचियों की तरह हो सकता है निम्नलिखित:पायथन

list1 = ["THE", "A"] 
list2 = ["ELEPHANT", "APPLE", "CAR"] 
list3 = ["WALKED", "DROVE", "SAT"] 

क्या मैं चाहता हूँ प्रत्येक सूची में हर संयोजन से अधिक पुनरावृति करने के लिए, ज्ञात शब्दों का एक शब्दकोश के खिलाफ एक जाँच है, जो शब्द-समूहों की तरह सबसे हैं देखने के लिए है शब्दकोष। इसका मतलब है कि पुनरावृत्तियों होगा जैसे: समस्या

[ 
    "THE ELEPHANT WALKED", 
    "THE APPLE WALKED", 
    "THE CAR WALKED", 
    "THE ELEPHANT DROVE", 
    "THE APPLE DROVE", 
    "THE CAR DROVE", 
    # ... 
    "A CAR SAT", 
] 

सूचियों के किसी भी संख्या हो सकता है कि है, और प्रत्येक सूची आइटम की एक परिवर्तनीय मात्रा हो सकते हैं। मुझे पता है कि इसके लिए रिकर्सन का उपयोग किया जा सकता है, लेकिन मुझे बिना किसी घुसपैठ के समाधान की आवश्यकता है। समस्या मैं कर रहा रखने के लिए, इस तथ्य सूचियों की एक परिवर्तनीय मात्रा वहाँ हो सकता है अन्यथा मैं तो बस लिखते थे:

for a in list1: 
    for b in list2: 
     for c in list3: 
      ... 

लेकिन मैं जहां रोकने के लिए पता नहीं होगा ...

उत्तर

24

itertools.product बिल्कुल वही करती आप क्या चाहते हैं:

from itertools import product 

lists = [ 
    ['THE', 'A'], 
    ['ELEPHANT', 'APPLE', 'CAR'], 
    ['WALKED', 'DROVE', 'SAT'] 
] 

for items in product(*lists): 
    print items 
+2

को देखते हुए का उपयोग करते हुए वह सूचियों की संख्या, '' उत्पादन नहीं जानता है टी (* सूचियां) '' अधिक उपयुक्त हो सकता है। –

+1

@ लैटवेयर: जब आप – Eric

+0

पर टिप्पणी करते थे तो ऐसा कर रहा था महान दिमाग एक जैसे सोचते हैं, +1। –

1

अजगर 3,2

from itertools import product 

[" ".join(i) for i in product(list1,list2,list3)]