Python定义重复规则

Python定义重复规则,python,Python,我有下表: index col_A col_B 0 John Jones 1 Perez Mark 2 Jones John 3 Mark Perez 4 Albert Perez 第0行和第2行以及第1行和第3行的列值都已切换。我正在寻找一种方法来识别第0行和第2行是重复的,第1行和第3行也是重复的。然后我想删除重复项,只保留一个唯一的引用。因此,生成的矩阵应该是3乘2(因为第4行没有重复项)。有没有一种不使用嵌套循环(我的表有300多万行)的有效方法?谢

我有下表:

index col_A col_B

0  John   Jones
1  Perez  Mark   
2  Jones  John   
3  Mark   Perez
4  Albert Perez

第0行和第2行以及第1行和第3行的列值都已切换。我正在寻找一种方法来识别第0行和第2行是重复的,第1行和第3行也是重复的。然后我想删除重复项,只保留一个唯一的引用。因此,生成的矩阵应该是3乘2(因为第4行没有重复项)。有没有一种不使用嵌套循环(我的表有300多万行)的有效方法?谢谢

您可以使用
集合
来记住已经添加的元素。差不多

a = [(0, 'John', 'Jones'), (1, 'Perez', 'Mark'), (2, 'Jones', 'John'), (3, 'Mark', 'Perez'), (4, 'Albert', 'Perez')]

res = []

already_added = set()

for e in a:
    key1, key2 = e[1]+e[2], e[2]+e[1]
    if key1 not in already_added and key2 not in already_added:
        res.append(e)
        already_added.add(key1)

res
Out[37]: [(0, 'John', 'Jones'), (1, 'Perez', 'Mark'), (4, 'Albert', 'Perez')]

一个简单且最有效的方法是创建一个DBMS。 在sqlite3中,类似这样的东西可以工作:

DELETE FROM table WHERE id NOT IN (SELECT max(id) FROM table GROUP BY col_A,col_B)

你使用的是什么数据库引擎?@youngminz:这是一个csv文件这将是一个高效的算法1:将所有数据读入内存2:对列a和列B进行排序3)对数据进行排序==>O(N log_2 N)4)查找重复项==>O(N)要查找重复项,对数据进行排序后将非常高效。嵌套for语句可能是O(N^2),而排序和查找重复项只是O(N log_2n)+O(N)不要使用
ready_added |=set([key1])
,只要使用
ready_added.add(key1)
@juanpa.arrivillaga谢谢您的评论,我会更正我的错误answer@kvorobiev还有胡安帕。阿里维拉加:谢谢!它工作得很好。这花了超过15分钟,但考虑到桌子的大小,我认为这是最快的选择。再次感谢