删除列表中具有重复内容的其他行

时间:2019-05-09 14:56:51

标签: python python-2.7

由于内部存在某些特定关键字,如何删除列表行。

这是为了重新排列RF测试报告表格。 过去,我尝试通过选择列表索引来删除该行, 但是,这似乎不是一个聪明的方法。

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']]
burstpower_i = [i for i,row in enumerate(list_1) if 'Burst Power (Average)' in row]
burstpower_iend = burstpower_i[-1] #Keep the last result to cover the previous ones
reindex = []
gap = burstpower_i[1] - burstpower_i[0]
for i,v in enumerate(burstpower_i):
        if (list_1[-1][3] == list_1[v][3]) and (list_1[-1][4] == list_1[v][4]):
            continue
        reindex.append(v)
for i in reindex:
        list_s = list_1[i:i+gap]
    list_end = list_1[burstpower_iend-gap:burstpower_iend]
    list_s.extend(list_end)

我希望输出结果表明MCS7的最后结果可以覆盖以前的结果。

['', '', 'Channel', 'Freq. (MHz)', 'Link Speed', 'Test Item', 'Lower Limit', 'Upper Limit', 'Measured', 'Unit', 'Status']
['', '', '1', '2412', 'MCS6', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS']
['', '', '1', '2412', 'MCS6', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS']
['', '', '1', '2412', 'MCS6', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS']
['', '', '1', '2412', 'MCS6', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS']
['', '', '1', '2412', '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']

2 个答案:

答案 0 :(得分:0)

将所有数据列表放入集合中,以确保消除重复项。

s = set()
s.add(tuple(["", "123", "1234"]))
s.add(tuple(["", "123", "1234"]))
s.add(tuple(["", "abc", "abcd"]))

,依此类推。最后,集合中的所有内容都是唯一的。

list(s) == [("", "123", "1234"), ("", "abc", "abcd")] # a list of tuples
map(list, list(s)) == [["", "123", "1234"], ["", "abc", "abcd"]] # converted to a list of lists

NB。您需要将元组放入集合而不是列表中的原因是,因为元组是可哈希的。 set对象利用该属性来发现重复项。

答案 1 :(得分:0)

pandas是一款不错的软件,可以有效处理复杂数据。检查一下:

import pandas as pd
data = pd.DataFrame(list_1)
data = data.drop_duplicates([4, 5])
new_list = data.values.tolist()