基本过滤器返回一个空列表

时间:2018-06-28 21:26:42

标签: python python-3.x python-2.7 list

def only_upper(t):
    res = []
    for s in t:
        if s.isupper():
            res.append(s)
        return res
t = ['a', 'B', 'c', 'D']

print only_upper(t)

我试图弄清楚为什么它返回一个空列表。结果在控制台中如下所示:

[]

2 个答案:

答案 0 :(得分:5)

您将在for循环的第一个元素之后立即返回,而不是在循环完成之后返回。取消缩进您的return语句,就可以了:

def only_upper(t):
    res = []
    for s in t:
        if s.isupper():
            res.append(s)
    return res # Here!

还值得一提的是,在列表理解中编写这样的过滤器通常比实现整个逻辑更容易:

print([x for x in t if x.isupper()])

答案 1 :(得分:3)

作为上述列表的替代方法,内置了filter函数(以防您的书中有更多内容):

list(filter(lambda x: x.isupper(), ['a', 'B', 'c', 'D']))