如何返回腿部数量大于指定值的animal类实例name属性列表,可一行实现吗?
问题说明
现有定义不完整的Python类和待补全函数,要求补全leg_count函数:传入animal实例列表和阈值参数multiple后,返回腿部数量大于multiple的实例的name属性组成的列表,同时判断该功能是否可以通过一行代码实现。
原始代码如下:
class animal(): def__init__(self, name, species, legs): self.name = name self.breed = species self.legs = legs def__eq__(self, other): return self.breed == other.species and self.name == other.name def__repr__(self): return f"{self.name}: {self.speies}: {self.legs}" def leg_count(animals, multiple): return
测试用例如下:
group1 = animal("Adam","dog",4) gruop2 = animal("Besty","cat", 4) group3 = animal("Alex","bird", 2) animals = [group1, group2, group3] leg_count(animals, 4)
前置修正:原始代码的笔误修复
原始代码存在多处笔误,运行前需要先修正:
- 魔术方法名和
def关键字之间缺少空格,比如def__init__需要改为def __init__ __repr__方法中访问了不存在的属性self.speies,实际存储物种的属性是self.breed__eq__方法中错误访问other.species,其他animal实例的物种属性为breed,需要改为other.breed- 测试用例中变量名拼写错误:
gruop2需要改为group2
修正后的完整类代码:
class animal(): def __init__(self, name, species, legs): self.name = name self.breed = species self.legs = legs def __eq__(self, other): return self.breed == other.breed and self.name == other.name def __repr__(self): return f"{self.name}: {self.breed}: {self.legs}"
leg_count函数实现
常规写法
def leg_count(animals, multiple): result = [] for item in animals: if item.legs > multiple: result.append(item.name) return result
一行实现写法
该功能完全可以通过一行代码实现,直接使用Python列表推导式即可:
def leg_count(animals, multiple): return [item.name for item in animals if item.legs > multiple]
测试用例运行结果
测试用例中传入阈值为4,所有animal实例的腿部数量都≤4,因此运行leg_count(animals, 4)返回结果为[]。
如果调整阈值为2,返回结果为['Adam', 'Besty']。
内容的提问来源于stack exchange,提问作者JJ.QQ
相关产品推荐
相关产品推荐

