Python如何基于自定义key弹出列表中的最大元素
实现方案
你可以通过Python内置的max()和列表原生的pop()方法组合实现该需求,不需要引入第三方依赖,以下是可复用的通用函数实现:
def pop_max(lst, key=lambda x: x): # 枚举列表元素的索引和值,按自定义key计算最大值对应条目 max_item = max(enumerate(lst), key=lambda item: key(item[1])) idx, max_elem = max_item # 弹出最大元素,返回元素和对应的key值 lst.pop(idx) return max_elem, key(max_elem)
调用示例
# 初始化输入列表 input_lst = ["abc", "a", "abcdef", "g", "h"] # 按元素长度为key弹出最大元素 pop_elem, pop_key_val = pop_max(input_lst, key=len) print(pop_elem, pop_key_val) # 输出:abcdef 6 print(input_lst) # 输出:['abc', 'a', 'g', 'h']
注意事项
- 若列表中存在多个元素的key值同为最大值,函数会弹出第一个出现的最大元素,和Python内置
max()函数的默认行为一致 - 函数会直接修改传入的原列表,和列表原生
pop()方法行为保持一致 - 自定义key支持传入任意可调用对象,可灵活调整为你需要的排序规则,比如按字符串最后一位的ASCII值、按数字的绝对值等
临时快速实现(无需封装函数)
如果只是单次使用不需要复用,可以直接写:
lst = ["abc", "a", "abcdef", "g", "h"] max_elem = max(lst, key=len) max_key_val = len(max_elem) lst.remove(max_elem)
缺点是remove()会二次遍历列表,性能略低于按索引弹出的实现,且如果列表存在多个和max_elem值完全相同的元素,只会删除第一个出现的。
内容的提问来源于stack exchange,提问作者user3104352
相关产品推荐
相关产品推荐

