2011-07-19 29 views
5

Mã Python này có thể được cải thiện không?Tập lệnh Python này có thể được cải thiện không?

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

Ngay sau khi nhìn thấy nó, mắt tôi phồng lên và tôi tự nghĩ, "có!" –

Trả lời

12

Có. Bạn có thể sử dụng itertools.product()

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

Và sử dụng 'tuple' thay vì' list's (làm cho phiên bản gốc nhanh hơn khoảng 12%). –

+0

cảm ơn gnibbler !! – lxneng

+0

Giải pháp này kết thúc nhanh hơn gấp hai lần phiên bản gốc và sử dụng 'tuple' thay vì' list's làm cho nó nhanh hơn 1-2% (ít hơn nhiều so với bản gốc). –

Các vấn đề liên quan