重构python函数,以便它可以采用任何大小的列表

时间:2011-03-22 04:26:05

标签: python refactoring

如何使此功能作为任意列表大小的输入?

def ugly_function(lst):
    for a in lst[0]:
        for b in lst[1]:
            for c in lst[2]:
                for d in lst[3]:
                    for e in lst[4]:
                        for f in lst[5]:
                            for g in lst[6]:
                                for h in lst[7]:
                                    if some_test([a,b,c,d,e,f,g,h]): 
                                        return [a,b,c,d,e,f,g,h]

2 个答案:

答案 0 :(得分:4)

Check out itertools.

def ugly_function(lst):
   for comb in itertools.product(*lst):
      if some_test(comb):
          return comb

(或者,作为1-liner:

def ugly_function(lst):
    return next(comb for comb in itertools.product(*lst) if some_test(comb))

答案 1 :(得分:2)

from itertools import ifilter, product

def nice_function(lst):
    return ifilter(some_test, product(*lst)).next()