python在比较项目时迭代两个列表

use*_*807 8 python list

我有两个列表,例如x = [1,2,3,4,4,5,6,7,7] y = [3,4,5,6,7,8,9,10],我想在比较项目时迭代这两个列表.对于那些匹配,我想调用一些函数并从列表中删除它们,在这个例子中我应该最终得到x = [1,2]和y = [8,9,10].由于我的数据类型和比较运算符,集合不适用于此问题.

for i in x:
  for j in y:
    if i ==j:
       callsomefunction(i,j)
       remove i, j from x and y respectively
Run Code Online (Sandbox Code Playgroud)

agf*_*agf 4

编辑:发现提出问题的人根本不知道__hash__我在评论中提供了此信息:

要使用集合,请实施__hash__. 因此,如果obj1 == obj2何时obj1.a == obj2.a and ob1.b == obj2.b__hash__应该是return hash((self.a, self.b)),并且您的设置将按预期工作。

这解决了他们的问题,他们转而使用集合。

这个答案的其余部分现在已经过时了,但它仍然是正确的(但效率非常低),所以我将其留在这里。


这段代码可以实现你想要的功能。最后,newx和是和newy的非重叠项。xy

x = [1,2,3,4,4,5,6,7,7]
y = [3,4,5,6,7,8,9,10]
# you can leave out bad and just compare against
# x at the end if memory is more important than speed
newx, bad, newy = [], [], []
for i in x:
    if i in y:
        callsomefunction(i)
        bad.append(i)
    else:
        newx.append(i)

for i in y:
    if i not in bad:
        newy.append(i)

print newx
print newy
Run Code Online (Sandbox Code Playgroud)

然而,我什至没有看到你的代码就知道这是错误的方法。你当然可以用套装来做,但如果你不想,那由你决定。