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

如何高效移除嵌套列表中的相似项(线性函数对比场景)

解决方案:高效生成不重复的线性函数对比对

核心思路

直接生成符合要求的对比项,而非先全量生成再过滤。具体逻辑:

  1. 先将所有线性函数表示为(斜率, 截距系数)的元组
  2. 只生成不重复的单向对比对:自动排除自身对比,且每个函数对仅保留一次(比如保留(A,B)则丢弃(B,A))

高效实现代码

import itertools

length = [1, 2]
multi = [3, 4]

# 生成所有线性函数的元组集合
funcs = list(itertools.product(length, multi))

# 生成符合条件的对比项:仅保留i<j的函数对,天然满足两个需求
result = [
    [a[0], a[1], b[0], b[1]]
    for i, a in enumerate(funcs)
    for b in funcs[i+1:]
]

# 输出结果
for item in result:
    print(item)

输出结果

[1, 3, 1, 4]
[1, 3, 2, 3]
[1, 3, 2, 4]
[1, 4, 2, 3]
[1, 4, 2, 4]
[2, 3, 2, 4]

为什么比原代码高效?

  • 减少无效生成:原方法先生成所有n²个四元组(n为线性函数总数),此方法仅生成n*(n-1)/2个有效项,直接省去一半以上计算量
  • 避免低效删除:原代码用list.remove(),每次操作都是O(n)时间复杂度,长列表下性能极差;此方法无需后续删除,一步到位
  • 逻辑简洁直接:通过索引i+1确保每个函数对仅被遍历一次,同时自动排除了自身对比的情况

另一种等价实现(基于元组比较)

如果偏好更直观的条件判断,也可以用元组自然排序过滤:

result = [
    [a[0], a[1], b[0], b[1]]
    for a in funcs
    for b in funcs
    if a != b and a < b
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:47:41