Python:修正older_people函数以返回所有指定年份前出生的人员姓名
修正
older_people函数以返回所有符合条件的人员姓名 需求说明
实现older_people(people: list, year: int)函数,从输入的人员列表(每个元素为包含姓名和出生年份的元组)中筛选出所有出生年份早于指定year的人员,返回其姓名组成的新列表。
示例代码及预期输出:
p1 = ("Adam", 1977) p2 = ("Ellen", 1985) p3 = ("Mary", 1953) p4 = ("Ernest", 1997) people = [p1, p2, p3, p4] older = older_people(people, 1979) print(older)
预期输出:['Adam', 'Mary']
原代码问题
当前编写的代码仅能返回第一个符合条件的人员,原代码如下:
def older_people(people: list, year: int): for person in plist: if person[1] < year: return person[0] p1 = ("Adam", 1977) p2 = ("Ellen", 1985) p3 = ("Mary", 1953) p4 = ("Ernest", 1997) plist = [p1, p2, p3, p4] older = older_people(plist, 1979) print(older)
问题点:
- 函数参数为
people,但循环中误用了外部变量plist,不符合函数封装性; - 找到第一个符合条件的元素就用
return终止函数,无法收集所有符合条件的姓名。
修正后的代码
基础循环实现
def older_people(people: list, year: int): result = [] for person in people: if person[1] < year: result.append(person[0]) return result p1 = ("Adam", 1977) p2 = ("Ellen", 1985) p3 = ("Mary", 1953) p4 = ("Ernest", 1997) plist = [p1, p2, p3, p4] older = older_people(plist, 1979) print(older) # 输出: ['Adam', 'Mary']
列表推导式简化实现
如果追求简洁,可以用Python的列表推导式一行完成:
def older_people(people: list, year: int): return [person[0] for person in people if person[1] < year]
内容的提问来源于stack exchange,提问作者Fontana dot py
相关产品推荐
相关产品推荐

