MST

星途 面试题库

面试题:Python复杂条件逻辑处理与性能优化

给定一个包含多个字典的列表,每个字典有 'name'、'age'、'score' 等键。要求筛选出年龄大于30岁,且分数大于80分,并且名字长度大于5的人员信息。请用Python编写代码实现,并阐述如何通过优化逻辑判断顺序提高代码执行效率。
32.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
data = [
    {'name': 'Alice', 'age': 35,'score': 85},
    {'name': 'Bob', 'age': 25,'score': 75},
    {'name': 'Charlie', 'age': 32,'score': 88},
    {'name': 'David', 'age': 38,'score': 78},
    {'name': 'Eva', 'age': 33,'score': 82},
    {'name': 'Franklin', 'age': 40,'score': 90}
]

result = [person for person in data if person['age'] > 30 and person['score'] > 80 and len(person['name']) > 5]
print(result)

优化逻辑判断顺序提高代码执行效率

  1. 原理:在逻辑与(and)运算中,Python 遵循短路原则,即从左到右依次判断条件,如果某个条件为 False,则不再判断后续条件。所以应该将最有可能为 False 的条件放在最前面进行判断,这样可以在更多情况下尽早结束判断,提高效率。
  2. 具体优化:在本题中,len(person['name']) > 5 这个条件计算量相对较小且相对更可能为 False(因为名字长度大于5的情况相比年龄大于30岁和分数大于80分可能出现得更少),所以可以将其放在最前面,优化后的代码如下:
result = [person for person in data if len(person['name']) > 5 and person['age'] > 30 and person['score'] > 80]
print(result)

这样在遍历数据时,如果名字长度不大于5,就不会再去判断年龄和分数的条件,从而减少不必要的计算,提高代码执行效率。