You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Python中跨列表移动符合条件元素的Pythonic通用高效实现方法

Pythonic 通用列表元素迁移方案

核心实现

def partition_move(source_list: list, predicate) -> list:
    matched = []
    # 倒序遍历避免删除元素导致的索引偏移问题
    for index in reversed(range(len(source_list))):
        current_item = source_list[index]
        if predicate(current_item):
            matched.append(current_item)
            del source_list[index]
    # 还原元素在原列表中的先后顺序
    matched.reverse()
    return matched

用法示例

完全适配给出的测试场景:

list_of_things = [1, 2, 3, 4]
is_odd = lambda x: x % 2 != 0
odd_list = partition_move(list_of_things, is_odd)

assert list_of_things == [2, 4]
assert odd_list == [1, 3]

方案说明

  • 性能满足要求:仅对原列表做1次遍历,时间复杂度为O(n),没有重复遍历的额外开销
  • 通用适配:支持传入任意规则的谓词判断函数,可覆盖所有同类元素迁移场景,不会局限于奇偶判断的个例
  • 符合Pythonic风格:逻辑简洁可读,没有冗余黑魔法,完全符合Python社区编码规范
  • 顺序一致:返回的符合条件的元素顺序和其在原列表中的先后顺序完全匹配

不推荐使用两次列表推导的写法:虽然代码更短,但需要遍历列表2次,大列表场景下性能差距明显,不符合性能要求,示例如下仅做思路参考:

# 性能较差,不建议生产使用
odd_list = [x for x in list_of_things if is_odd(x)]
list_of_things[:] = [x for x in list_of_things if not is_odd(x)]

内容的提问来源于stack exchange,提问作者Alex Kyriazis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:15:04