在Python中为一个循环声明变量

时间:2016-05-18 11:14:55

标签: python for-loop

我有一个像这样的for循环的函数

def my_func():
    order = [1,2,3,4,5,6,7]
    my_list = []
    for o in order:
        tmp = is_odd(o)
        if tmp:
            my_list.append(tmp)
    return my_list

def is_odd(n):
    if n%2 != 0:
        return n
    else:
        return False

我想将它转换为一行python for loop。我这样做了

def my_func():
    order = [1,2,3,4,5,6,7]
    my_list = [is_odd(o) for o in order if is_odd(o)]
    return my_list

def is_odd(n):
    if n%2 != 0:
        return n
    else:
        return False

此代码的问题在于它在每次循环迭代中调用is_odd函数两次。有没有其他方法将循环转换为一个行循环并只调用is_odd函数一次?

(这不是原始代码。只是一个例子)

3 个答案:

答案 0 :(得分:4)

正如问题的答案所述,我已将其与您的问题重复链接:

您将创建一个生成器(或列表),用于生成函数调用的(中间)结果,并根据该结果生成过滤后的输出:

示例:

def my_func():
    order = [1,2,3,4,5,6,7]
    intermediate_results = (is_odd(o) for o in order)
    # alternatively filter using `filter(None, intermediate_results)`
    return [i for i in intermediate_results if i]

答案 1 :(得分:1)

在这种情况下,您可以使用filter function.例如。 my_list = filter(is_odd, order)

如果您有类似需求,请查看itertools module.

答案 2 :(得分:1)

嗨 - 看起来你为is_odd(o)的实例返回函数 o(因此再次运行它),其中函数is_odd(o)返回true。以下应该只运行一次:

def my_func():
    order = [1,2,3,4,5,6,7]
    my_list = [o for o in order if is_odd(o)]
    return my_list