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

如何基于特定关键词删除列表重复行以整理RF测试报告

你提到之前通过列表索引删除重复行的方法不够高效,想要保留每个Freq. (MHz) + Link Speed组合的最后一组测试结果,覆盖之前的重复数据。我来给你一个更简洁通用的解决方案:

核心思路

我们可以用字典来跟踪每个(Freq. (MHz), Link Speed)组合最后一次出现的完整测试项组。因为每个组合对应的测试项是固定的(比如5行一组),我们先识别每个组的起始位置,再用字典记录最新的组,最后合并表头和所有最新组得到结果。

优化后的代码

list_1 = [['', '', 'Channel', 'Freq. (MHz)', 'Link Speed', 'Test Item', 'Lower Limit', 'Upper Limit', 'Measured', 'Unit', 'Status'],
['', '', '1', '2442', 'MCS6', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS'],
['', '', '1', '2442', 'MCS6', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS'],
['', '', '1', '2442', 'MCS6', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS'],
['', '', '1', '2442', 'MCS6', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS'],
['', '', '1', '2442', 'MCS6', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS'],
['', '', '1', '2412', 'MCS7', 'Burst Power (Average)', '-100', '30', '12.29', 'dBm', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM All Carriers (Average)', '', '-27', '-31.16', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM Data Carriers (Average)', '', '-27', '-31.15', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM Pilot Carriers (Average)', '', '-8', '-33.18', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'Center Freq. Error (Average)', '-60300', '60300', '663.16', 'Hz', 'PASS'],
['', '', '1', '2412', 'MCS7', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS'],
['', '', '1', '2412', 'MCS7', 'Burst Power (Average)', '-100', '30', '12.02', 'dBm', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM All Carriers (Average)', '', '-27', '-32.08', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM Data Carriers (Average)', '', '-27', '-31.98', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'EVM Pilot Carriers (Average)', '', '-8', '-33.56', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS7', 'Center Freq. Error (Average)', '-60300', '60300', '763.52', 'Hz', 'PASS']]

# 提取表头
header = list_1[0]
# 确定每组测试项的行数(从第一个Burst Power到下一个的间隔)
burst_indices = [i for i, row in enumerate(list_1) if row[5] == 'Burst Power (Average)']
group_size = burst_indices[1] - burst_indices[0] if len(burst_indices) > 1 else 1

# 用字典存储每个(Freq, Link Speed)组合的最后一组数据
latest_groups = {}
for idx in burst_indices:
    freq = list_1[idx][3]
    link_speed = list_1[idx][4]
    # 提取当前组的所有行
    current_group = list_1[idx:idx+group_size]
    # 更新字典,保留最后一组
    latest_groups[(freq, link_speed)] = current_group

# 合并表头和所有最新组
result = [header]
for group in latest_groups.values():
    result.extend(group)

# 打印结果验证
for row in result:
    print(row)

代码解释

  1. 提取表头:单独拿出第一行作为结果的表头,避免处理测试数据时干扰表头内容。
  2. 动态确定组大小:通过找到所有Burst Power (Average)的位置,计算出每个测试组合对应的行数(这里是5行),这个值是动态计算的,即使后续测试项数量变化也能适配。
  3. 跟踪最新组:遍历每个测试组的起始索引,用(Freq. (MHz), Link Speed)作为字典的唯一键,每次遇到相同键时,用最新的组覆盖之前的记录,确保字典里最终只保留每个组合的最后一组数据。
  4. 生成最终结果:把表头和字典中存储的所有最新组合并,得到去重后的完整测试报告。

输出结果

运行代码后,会得到你期望的结果:

['', '', 'Channel', 'Freq. (MHz)', 'Link Speed', 'Test Item', 'Lower Limit', 'Upper Limit', 'Measured', 'Unit', 'Status']
['', '', '1', '2442', 'MCS6', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS']
['', '', '1', '2442', 'MCS6', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS']
['', '', '1', '2442', 'MCS6', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS']
['', '', '1', '2442', 'MCS6', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS']
['', '', '1', '2442', 'MCS6', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS']
['', '', '1', '2412', 'MCS7', 'Burst Power (Average)', '-100', '30', '12.02', 'dBm', 'PASS']
['', '', '1', '2412', 'MCS7', 'EVM All Carriers (Average)', '', '-27', '-32.08', 'dB', 'PASS']
['', '', '1', '2412', 'MCS7', 'EVM Data Carriers (Average)', '', '-27', '-31.98', 'dB', 'PASS']
['', '', '1', '2412', 'MCS7', 'EVM Pilot Carriers (Average)', '', '-8', '-33.56', 'dB', 'PASS']
['', '', '1', '2412', 'MCS7', 'Center Freq. Error (Average)', '-60300', '60300', '763.52', 'Hz', 'PASS']

这个方法比你之前的索引操作更灵活高效,字典的查找和更新都是O(1)的时间复杂度,整体只需遍历一次列表即可完成去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:42:02