我试图定义一个函数,该函数从整数列表中返回偶数整数列表
def print_even_numbers(n: list):
'''Return a list of even numbers given a list of integers'''
for x in list:
if x % 2 == 0:
return(x)
当我尝试上面的代码时,错误表明该类型不可迭代
答案 0 :(得分:2)
list
是列表类型的名称。所以你不能迭代一个类型。你应该使用n
。其次,您的return
缩进错误。它应该位于顶层功能级别,因为return
退出该功能。然后你需要在某个地方收集结果。
def print_even_numbers(n):
'''Return a list of even numbers given a list of integers'''
result = []
for x in n:
if x % 2 == 0:
result.append(x)
return result
这可以通过列表理解来简写:
def print_even_numbers(n):
'''Return a list of even numbers given a list of integers'''
return [x for x in n if x % 2 == 0]
答案 1 :(得分:1)
错误的python语法:
def print_even_numbers(n: list):
您不需要括号:
return(x)
错误的缩进。错误的条件。 (并且不要为自己的变量使用保留的python单词list
。
for x in list:
概述:
def print_even_numbers(n):
'''Return a list of even numbers given a list of integers'''
result = []
for x in n:
if x % 2 == 0:
result.append(x)
return result
print print_even_numbers(range(10))
>>> [0, 2, 4, 6, 8]
最后更多的pythonic方法是使用yield
来实现所需的行为:
def gen_even_numbers(n):
for x in n:
if x % 2 == 0:
yield x
print list(gen_even_numbers(range(10)))
>>> [0, 2, 4, 6, 8]
答案 2 :(得分:0)
您可以使用filter
内置
def print_even_numbers(lst):
return list(filter(lambda x: not x%2, lst))
注意:在python 2上filter
已经返回一个列表,所以不需要转换它
def print_even_numbers(lst):
return filter(lambda x: not x%2, lst)
顺便说一下,该函数名为print_even_numbers
,但它不会打印任何内容;)