繁体   English   中英

打印给定列表中的偶数

[英]Print the even numbers from a given list

我从python开始,然后练习代码以从列表中打印偶数。

样品清单:

[1, 2, 3, 4, 5, 6, 7, 8, 9] 

码:

def p_even(lst):
    for num in lst:
        if num %2 == 0:
            return num

我期待列表[2,4,6,8]中的偶数,但请给我2。

是的,该代码将返回找到的第一个偶数,当这样做时将停止对列表的处理。

如果需要所有偶数,则可以使用(a)

def p_even(lst):
    #       _____Construct new list_____
    #      /                            \
    return [x for x in lst if x % 2 == 0]
    #       \____________/ \___________/
    # from these elements   that meet this condition

(注释仅用于解释,您编写的任何实际代码中可能都不需要这些注释)。

这在Python中称为列表理解,是一种通过过滤某些元素从列表中创建另一个列表的有效方法(在这种情况下)。

要打印元素,您可以只打印返回列表本身(下面的第一行),也可以打印每个元素(下面的for循环):

print(p_even(range(20))
for itm in p_even(range(20)):
    print(itm)

(a)可以为此使用显式循环,例如:

def p_even(lst):
    even_lst = []
    for itm in lst:
        if itm % 2 == 0:
            even_lst.append(itm)

但这并不是真正意义上的“ pythonic”。 Python提供了非常富有表现力(简洁)的方式来执行此类操作,我认为,学习它们会更好,因为它们会使您的代码更具可读性且易于维护。

这将完成工作:

def p_even(lst):
    return [x for x in lst if not x % 2]

这是一些测试:

>> def p_even(lst):
...     return [x for x in lst if not x % 2]
... 
>>> p_even(range(100))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
>>> p_even(range(50))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48]
>>> p_even(range(103,120))
[104, 106, 108, 110, 112, 114, 116, 118]
>>> 

这是使用生成器的另一种方法:

def p_even(lst):
    for x in lst:
        if not x % 2:
            yield x

以及相应的用法:

>>> def p_even(lst):
...     for x in lst:
...         if not x % 2:
...             yield x
... 
>>> p_even(range(10))
<generator object p_even at 0x7fe0ff77e840>
>>> list(p_even(range(10)))
[0, 2, 4, 6, 8]
>>> 

您的return语句应与缩进级别相同。 另外,您需要保存此列表并返回所有偶数(如果您要这样做)。 (还假设您想使用循环方法来完成此操作,否则,有更多方法可以解决问题。)

def p_even(lst):
    ret_list = []
    for num in lst:
        if num %2 == 0:
            ret_list.append(num)
     return ret_list

您可以通过列表理解来做到这一点,例如:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [x for x in list1 if x % 2 == 0]
print(list2)

产量:

[2, 4, 6, 8]

如果要将其抽象为一个函数,它将看起来像:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def get_evens(input_list):
    output = [x for x in input_list if x % 2 == 0]
    return output
print(get_evens(list1))

达到相同的结果!

您需要在p_even()声明一个列表。 在for循环中,将遇到的所有偶数添加到列表中。 最后, 在for循环之外 ,返回列表。

def p_even(lst):
    even_num = []
    for num in lst:
        if num %2 == 0:
            even_num.append(num)
    return even_num

较短的解决方案(对于新的python程序员来说,乍一看可能会更难一些):

def p_even(lst):
    return [x for x in lst if x % 2 == 0]

该代码实质上返回一个列表,其中包含lst中每个值x ,其中x % 2 == 0 ; x是偶数。

上面的两种方法都适用于[1, 2, 3, 4, 5, 6, 7, 8, 9] ,返回[2, 4, 6, 8]

list1 = [1, 2, 3, 4, 5, 6, 7, 8, ] 
for num in list1: 
    if num % 2 == 0: 
         print(num, end = " ")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM