MST

星途 面试题库

面试题:Python循环条件判断优化之复杂场景

假设你有一个包含大量字典的列表,每个字典代表一个用户信息,如下: ```python users = [ {'name': 'Alice', 'age': 25, 'is_active': True, 'points': 100}, {'name': 'Bob', 'age': 30, 'is_active': False, 'points': 50}, {'name': 'Charlie', 'age': 22, 'is_active': True, 'points': 150} # 假设有很多这样的字典 ] ``` 现在要遍历这个列表,找到年龄大于25岁、处于活跃状态且积分大于100的用户,并将其名字收集到一个新列表中。请编写代码实现,并详细阐述如何对循环中的条件判断进行优化以提高性能。
27.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
users = [
    {'name': 'Alice', 'age': 25, 'is_active': True, 'points': 100},
    {'name': 'Bob', 'age': 30, 'is_active': False, 'points': 50},
    {'name': 'Charlie', 'age': 22, 'is_active': True, 'points': 150}
    # 假设有很多这样的字典
]

result = []
for user in users:
    if user['age'] > 25 and user['is_active'] and user['points'] > 100:
        result.append(user['name'])

print(result)

条件判断优化提高性能的方法

  1. 按概率从高到低排列条件:如果可以事先知道某些条件的满足概率,将满足概率低的条件放在前面。例如,如果 is_activeFalse 的用户占比很大,那么可以将 user['is_active'] 这个条件放在最前面,这样很多不满足的情况可以在第一步就被排除,减少后续条件判断的计算量。

  2. 减少函数调用:在条件判断中,尽量减少函数调用。在当前代码中,条件判断都是直接读取字典的值进行比较,没有额外的函数调用,这是比较好的。如果条件判断中有函数调用,要尽量避免不必要的调用,例如将结果缓存起来,避免重复计算。

  3. 使用生成器表达式:可以使用生成器表达式来简化代码并可能提高性能,如下:

result = [user['name'] for user in users if user['age'] > 25 and user['is_active'] and user['points'] > 100]

生成器表达式在迭代时是惰性求值的,只有在实际需要获取结果时才会计算,在处理大数据集时可能会有更好的性能表现。同时,这种方式代码更简洁。