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)
我试图弄清楚为什么它返回一个空列表。结果在控制台中如下所示:
[]
答案 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']))