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

如何基于另一列表分组移除列表中的重复元素

实现思路与代码

核心规则

按列表a中连续相同元素分组,对每组对应的b元素做如下处理:

  • 仅保留第一次出现的非空值(如v1/v2/v3等),后续重复的相同非空值替换为空字符串''
  • 原有的空字符串保持不变

可行方案:分组后逐组处理

你提到的「先将b按a的分组转为二维列表再处理」完全可行,具体步骤如下:

  1. 分组:利用itertools.groupby(因a中相同元素连续),将a和b配对后按a的元素分组,提取每组对应的b元素子集。
  2. 去重处理:对每个b子集,维护一个记录已出现非空值的集合,遍历元素时:
    • 空字符串直接保留
    • 首次出现的非空值保留并加入集合
    • 重复出现的非空值替换为空字符串
  3. 合并结果:将处理后的所有分组元素合并为最终的b列表。

代码实现

import itertools

a = [1,1,1,1,2,2,2,2,3,3,3,3,3,3,4,4,5,5,5,5,5]
b = ['v1','v2','v2','',
     'v1','v2','v2','',
     'v1','v2','v3','v3','v3','v3',
     'v1','v2',
     'v1','v2','v2','v2','']

processed_b = []
# 按a的元素分组,同时配对对应的b元素
for key, group in itertools.groupby(zip(a, b), key=lambda x: x[0]):
    b_group = [item[1] for item in group]
    seen = set()
    temp = []
    for elem in b_group:
        if elem == '':
            temp.append('')
        else:
            if elem not in seen:
                temp.append(elem)
                seen.add(elem)
            else:
                temp.append('')
    processed_b.extend(temp)

# 输出预期结果
print(processed_b)

输出结果

['v1', 'v2', '', '', 'v1', 'v2', '', '', 'v1', 'v2', 'v3', '', '', '', 'v1', 'v2', 'v1', 'v2', '', '', '']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:54:06