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

如何在Python中获取唯一的二元数组?无需第三方库

高效去重长度为2的子数组(忽略顺序)

你的原方法问题在于每次用in判断列表元素,这是线性遍历操作,数据量大时时间复杂度会达到O(n²),效率极低。改用集合存储已出现的"标准化"子数组,能把查询时间降到O(1),整体效率大幅提升。

方案1:生成新的去重列表

这种方式不修改原数组,返回去重后的结果:

nums = [[2, 9], [3, 6], [9, 2], [6, 3]]

seen = set()
unique = []
for pair in nums:
    # 将子数组转为有序元组作为唯一标识,让[2,9]和[9,2]对应同一个键
    standardized = tuple(sorted(pair))
    if standardized not in seen:
        seen.add(standardized)
        unique.append(pair)  # 若需要避免原数组引用,可改用pair.copy()

print(unique)  # 输出: [[2, 9], [3, 6]]

方案2:原地修改原数组

如果你需要直接修改原nums数组,可采用这种方式:

nums = [[2, 9], [3, 6], [9, 2], [6, 3]]

seen = set()
idx = 0
while idx < len(nums):
    pair = nums[idx]
    standardized = tuple(sorted(pair))
    if standardized in seen:
        # 发现重复则删除当前元素,索引不递增(删除后后续元素会前移)
        del nums[idx]
    else:
        seen.add(standardized)
        idx += 1

print(nums)  # 输出: [[2, 9], [3, 6]]

关键优化点

  • 利用有序元组作为子数组的唯一标识:因为子数组长度固定为2,排序的开销可以忽略不计,但能让顺序相反的子数组被识别为同一元素
  • 集合的查询/插入操作平均时间复杂度为O(1),整体处理时间复杂度为O(n),面对大规模数据时比原方法快得多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:06:20