【发布时间】:2016-05-18 11:14:55
【问题描述】:
我有一个像这样的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 循环。我是这样做的
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 函数?
(这不是原始代码。只是一个例子)
【问题讨论】:
-
如果你只使用 is_odd ,让它只返回 True 或 False,如果不只是创建一个新函数来执行它。你知道你可以做到
[o for o in order if is_odd(o) ]吗? -
它不仅返回 false 或 true。如果找到它,它将返回一个数组中的对象,如
[object]。否则返回None。正如我所提到的,这不是我的原始代码。这只是一个例子。 -
所以你展示的代码与你的完全不同,并期望得到好的答案,...好吧。
-
和我的代码没有区别。我在我的代码中展示了我想将
is_odd函数返回的值用于if条件以及我的列表中。