Python如何按给定优先级从列表中筛选最高偏好的匹配元素?
解决方案
提供两种无复杂循环的Python一行实现思路:
方案1:极简遍历法(代码最简短,适合小数据量场景)
利用person_choice本身已经按优先级降序排列的特性,遍历优先级列表时第一个匹配到group内的元素就是最高优先级结果:
# 替换group1为你要处理的列表变量即可 group1_choice = next(name for name in person_choice if name in group1)
说明:题目已保证每个group至少存在一个匹配元素,不会抛出
StopIteration异常,person_choice长度较短时优先选这个方案。
方案2:高性能映射法(适合大数据量、多次查询的场景)
先构造优先级映射字典将成员查询复杂度降到O(1),再用min函数直接取优先级最高的元素:
# 全局只需构造一次即可重复用于所有group查询 priority_map = {name: idx for idx, name in enumerate(person_choice)} # 单个group的查询一行实现 group1_choice = min((name for name in group1 if name in priority_map), key=priority_map.get)
说明:当
group列表长度远小于person_choice时,这个方案性能更高。
内容的提问来源于stack exchange,提问作者Tristan Tran
相关产品推荐
相关产品推荐

