我希望我的程序遍历给定列表并返回低于5的所有积分。
出于某种原因,它会这样做,但只要达到五次就停止,而不是继续通过列表。
import os
os.system('cls' if os.name == 'nt' else 'clear')
def ace(a):
d = []
h = len(a)
for i in a:
if i < 5:
d.append(i)
continue
else:
continue
return d
m = [1, 2, 4, 3, 3, 5]
print ace(m)
答案 0 :(得分:1)
您的代码可以正常工作,但是,您的return语句错误地放在for循环中。要使它工作,你必须删除一个缩进,将它放在for循环之外,但仍然在函数内部。 然而,有更好,更清洁的pythonic方式。 您可以使用具有匿名lambda函数的过滤器函数:
def ace(a):
return list(filter(lambda x: x < 5, a))
m = [1, 2, 4, 3, 3, 5]
print (ace(m))
或者您可以使用列表推导而不是过滤功能:
def ace(a):
return [number for number in a if number < 5]
m = [1, 2, 4, 3, 3, 5]
print (ace(m))
答案 1 :(得分:0)
你可以使用列表理解,这很容易。您可以返回此列表。
在此处阅读有关列表理解的更多信息 https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions`
m = [1, 2, 4, 3, 3, 5]
new_list = [value for value in m if value < 5]`
此new_list将包含 [1,2,4,3,3]
答案 2 :(得分:0)
return语句应该在循环之外。
该功能也可以写成:
def ace(a):
return [ i for i in a if i<5 ]
答案 3 :(得分:0)
首先,要修复你的代码,主要问题是返回是在循环内部。在循环完成后,您应该只返回。此外,你在循环中有无用的代码:继续,因为最后一个语句什么都不做,你永远不会使用 h 的值。缩短它:
{{1}}
清除它你的方式。正如其他人已经注意到的那样,Python有一个名为 comprehension 的结构,允许您从迭代结构构建列表,元组,字典和生成器。
{{1}}
将在一行中完成该功能。