For和In循环

时间:2017-03-15 16:45:18

标签: python loops

我希望我的程序遍历给定列表并返回低于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)

4 个答案:

答案 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}}

将在一行中完成该功能。