我有两个列表,例如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)
编辑:发现提出问题的人根本不知道__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)
然而,我什至没有看到你的代码就知道这是错误的方法。你当然可以用套装来做,但如果你不想,那由你决定。
| 归档时间: |
|
| 查看次数: |
12917 次 |
| 最近记录: |