Python 二维列表,仅保留列上具有唯一值的行

Python 二维列表,仅保留列上具有唯一值的行,python,Python,我有这样一个清单: [['A','B','1'], ['A','D','2'], ['F','B','1'], ['K','B','1'], ['M','D','2'], ['G','H','3'] ] 我只想保留“column”2包含唯一值的行。 更具体地说,新的“矩阵”应该只有最后两列 结果: [ ['B','1'], ['D','2'], ['H','3'] ] 有超过1.000.000行,第2列包含48位的字符串,因

我有这样一个清单:

[['A','B','1'],  
 ['A','D','2'],  
 ['F','B','1'],  
 ['K','B','1'],  
 ['M','D','2'],  
 ['G','H','3']  
]  
我只想保留“column”2包含唯一值的行。 更具体地说,新的“矩阵”应该只有最后两列

结果:

[    
 ['B','1'],  
 ['D','2'],  
 ['H','3']  
]  
有超过1.000.000行,第2列包含48位的字符串,因此最好使用快速方法

谢谢你,
汤姆

我试过:

matrixData=[['A','B','1'],['A','D','2'],['F','B','1'],['K','B','1'],['M','D','2'],['G','H','3']]  
uniqueCol2=[]  
uniqueCol3=[]  
for line in matrixData:  
    if line[1] not in uniqueCol2:  
        uniqueCol2.append(line[1])  
        uniqueCol3.append(line[2])  
print uniqueCol2  
print uniqueCol3  
结果

['B','D','H']  
['1','2','3']  

这给了我两个列表,最后我需要uniqueCol3的总和,但是因为有超过1.000.000行,而且可能因为字符串包含48位数字,如果行[1]不在uniqueCol2:

中,则需要花费大量时间来检查
,您可以尝试以下内容:

 def crop(input_matrix):
     output_matrix = []
     unique = set() # Tracks unique 2nd column entries
     for row in input_matrix:
         if row[1] not in unique: # If second column is unique, add the row slice to the output matrix
            output_matrix.append(row[1:2])
            unique.add(row[1]) # Add that value to unique entries we've found so far
     return output_matrix
set
是要搜索的O(1),因此它的效率与您从该方面获得的效率一样。因此,这个问题的总复杂度是O(n)与输入矩阵中的行数有关,我认为这与您将获得的效率一样,除非有一些信息可以用来预测哪些行是非唯一的


您完全可以通过列表理解将其编码为两行代码,但为了清晰起见,我没有这样做

您尝试过什么吗?我不太明白在你的例子中,
'B'
'D'
是如何被认为是独一无二的。这是一个非常普遍的问题。。你用什么语言?您已经尝试过做什么?选择唯一行的规则是什么?如果输入项之一是
['A','B','2']
,输出应该是什么?