将列表的元素返回到第一个偶数

时间:2017-12-23 04:07:58

标签: python

我正在编写一个函数,它将列表中的元素返回到所述列表中的第一个偶数。

def up_to_even(list):
    new_list = []
    for num in list:
        if num % 2 != 0:
            new_list.append(num)
        else: 
            return new_list

我做错了什么?

4 个答案:

答案 0 :(得分:3)

您当前的功能正常。当找到偶数时,它会停止向结果列表中添加元素。

但是,在这里使用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))

答案 1 :(得分:2)

如果列表中没有偶数,你就不会考虑这种情况,在这种情况下它永远不会到达else,因此没有返回任何列表,修复它只是添加一个在功能结束时返回

def up_to_even(lst):
    new_list = []
    for num in lst:
        if num % 2 != 0:
            new_list.append(num)
        else: 
            return new_list # or use break
    return new_list

这里有一些测试

>>> up_to_even([1,3,4])
[1, 3]
>>> up_to_even([1,3,4,5])
[1, 3]
>>> up_to_even([1,3,41,5])
[1, 3, 41, 5]
>>> 

答案 2 :(得分:1)

当没有'偶数'时,你的函数返回'无',所以这里是几行代码的更新版本:

如果数据是:

a=[1,3,5,7,9,2,33,77]

代码:

def up_to_even(list_1):
    new_list=[]
    for i in list_1:
        if i%2!=0:
            new_list.append(i)
        else:
            break
    return new_list
print(up_to_even(a))

输出:

[1, 3, 5, 7, 9]

P.S:不要将变量名称用作'list','list'是python中的关键字。

答案 3 :(得分:0)

在python3中

form itertools import takewhile

def up_to_even(lst): 
  return list(takewhile(lambda x: x%2, lst)