2011-07-19 16 views
5

Bu Python kodu geliştirilebilir mi?Bu Python betiği geliştirilebilir mi?

def build_list(types): 
     for x in types: 
      for a in ['short', 'long', 'average']: 
       for b in ['square', 'sloped', 'average']: 
        for c in ['small', 'large', 'average']: 
         for d in ['thin', 'thick', 'average']: 
          for e in ['high', 'low', 'average']: 
           for f in [True, False]: 
            for g in [True, False]: 
             for h in ['flat', 'thick', 'average']: 
              for i in ['long', 'short', 'average']: 
               for j in [True, False]: 
                for k in ['thin', 'thick', 'average']: 
                 for l in ['thin', 'thick', 'average']: 
                  yield [x, a, b, c, d, e, f, g, h, i, j, k, l] 
    facets_list = list(build_list(xrange(1,121))) 
    print len(facets_list) 
+6

Gördüğüm anda gözlerim şişti ve kendime "evet!" Diye düşündüm. –

cevap

12

Evet. itertools.product()

import itertools 
facets_list = list(itertools.product(types, 
            ['short', 'long', 'average'], 
            ['square', 'sloped', 'average'], 
            ['small', 'large', 'average'], 
            ...)) 
+0

Ve 'list' yerine 'tuple's kullanın (orijinal sürümü yaklaşık% 12 daha hızlı hale getirir). –

+0

teşekkürler gnibbler !! – lxneng

+0

Bu çözüm, orijinal sürümün yaklaşık iki katı kadar hızlı bir şekilde biter ve "list" yerine "tuple" kullanıldığında,% 1-2 daha hızlıdır (orijinalden çok daha az fark). –

İlgili konular