将函数转换为单行列表理解

时间:2010-09-10 21:25:57

标签: python list-comprehension

是否可以将此功能,列表理解组合转换为单个列表理解(以便不需要keep)?

def keep(list, i, big):
    for small in list[i+1:]:
        if 0 == big % small:
            return False
    return True

multiples[:] = [n for i,n in enumerate(multiples) if keep(multiples, i, n)]

3 个答案:

答案 0 :(得分:6)

我认为就是这样:

multiples[:] = [n for i,n in enumerate(multiples) 
                       if all(n % small for small in multiples[i+1:])] 

答案 1 :(得分:2)

multiples[:] = [n for i, n in enumerate(multiples) if 0 not in [n % other for other in multiples[i+1:]]

Advisible?可能不是。

答案 2 :(得分:1)

首先要学习不要在代码中使用list之类的名称。还要记住“首先使它工作,然后优化”。如果你继续学习东西,很可能在一个月后你对代码不再满意。尝试制作可读代码。为此,如果你可以(天堂禁止!)将它放在一边几个星期后阅读你自己的代码就会有所帮助。

也就是说,有时候实现列表理解更具可读性,但通常只有在编写了更愚蠢的代码版本之后才能实现。