我正在编写一个函数,它将返回列表中的元素,直到所述列表中的第一个偶数。
def up_to_even(list):
new_list = []
for num in list:
if num % 2 != 0:
new_list.append(num)
else:
return new_list
我做错了什么?
请您参考如下方法:
您当前的功能运行良好。当找到偶数时,它会停止向结果列表中添加元素。
但是,这里使用 for 循环是受控迭代,只有当您要检查列表中的每个元素时才需要这样做。这就是为什么您当前的函数需要有一个特殊的 else 案例来专门跳出循环并返回结果列表。
由于您不知道何时会遇到偶数,因此可以改用 while 循环,也称为不受控制的迭代。
这是一个例子:
lst = [1, 3, 5, 7, 8]
i = 0
result = []
while lst[i] % 2 != 0:
result.append(lst[i])
i += 1
print(result)
# [1, 3, 5, 7]
请记住,您始终可以使用 itertools.takewhile()也这样做:
import itertools
lst = [1, 3, 5, 7, 8]
result = list(itertools.takewhile(lambda x : x % 2 != 0, lst))
print(result)
# [1, 3, 5, 7]
注意:使用lambda这里只是当场创建一个匿名函数。如果您不想使用它,您可以创建自己的辅助函数:
def evens(x):
return x % 2 != 0
并以同样的方式调用 itertools.takewhile():
result = list(itertools.takewhile(evens, lst))
