Python开发需求:找出两个列表中的最大公共数值
找出两个列表共有的最大数值的实现方案
核心思路
解决这个问题的核心逻辑是:先提取两个列表的公共元素,再从这些公共元素中筛选出最大值。根据场景不同,有两种高效实现方式:
通用实现(适用于任意列表)
这种方法不依赖列表是否排序,兼容性更强:
- 将其中一个列表转为集合,利用集合O(1)的成员查询效率提升性能
- 遍历另一个列表,筛选出同时存在于集合中的元素,得到公共元素列表
- 若公共元素列表为空,返回预设值(如
None);否则返回该列表的最大值
代码示例
def find_max_common(list1, list2): # 转换为集合优化查询速度 set_list2 = set(list2) # 筛选两个列表的公共元素 common_elements = [num for num in list1 if num in set_list2] if not common_elements: return None # 无公共元素时返回None,可根据需求改为提示或其他值 return max(common_elements) # 测试示例 list1 = [2,4,6,12] list2 = [2,4,6,8,14] print(find_max_common(list1, list2)) # 输出: 6
优化实现(适用于可排序的列表)
如果允许对列表排序,可以进一步提升性能——无需收集所有公共元素,从大到小遍历第一个列表,找到第一个存在于第二个列表的元素即可返回:
def find_max_common_optimized(list1, list2): set_list2 = set(list2) # 对list1降序排序,逐个检查是否在集合中 for num in sorted(list1, reverse=True): if num in set_list2: return num return None
注意事项
- 若其中一个或两个列表为空,需根据业务逻辑调整返回值(比如返回
None或抛出提示) - 列表中的重复元素不影响结果,
max()仅关注数值大小 - 当列表数据量极大时,集合查询的效率远高于直接列表遍历查询
内容的提问来源于stack exchange,提问作者Sanith Fernando
相关产品推荐
相关产品推荐

