Python

2012-11-18 28 views
15

içinde bilinmeyen sayıda iç içe döngüleri yineleme Her biri sözcük içeren, kullanıcı tanımlı bir değişken sayısında değişken var. Örneğin, üç listeleri gibi olabilir şunlardır:Python

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

İstediğim kelime gruplar gibi en olduğunu görmek için, bilinen kelimelerin bir sözlüğe karşı her kontrol her listedeki her kombinasyonu üzerinde yineleme etmektir sözlük. Sorun listeleri herhangi bir sayı olamayacağını ve her liste öğelerinin değişken miktarda içerebilir

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

: Böyle yineleme olurdu anlamına gelir. Bunun için özyinelemenin kullanılabileceğini biliyorum ama özyinesiz bir çözüme ihtiyacım var.

cevap

24

itertools.product tam olarak yapar ...

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

Ama nereye durdurmak için bilemezsiniz: Ben sahip tutmak sorun yoksa ben sadece yazardım, listelerin bir değişken miktarda olamayacağını gerçektir ne istediğinizi:

from itertools import product 

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

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

kullanma o listelerin sayısını, '' üretimi bilmiyor t (* listeler) '' daha uygun olabilir. –

+1

@Lattyware: – Eric

+0

yorumunu yaparken bunu yapıyordum Büyük beyinler, benzer düşün, +1. –

1

Verilen piton 3,2

from itertools import product 

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