2012-08-12 79 views
0
def removeCommonElements(tup1,tup2): 
count=0 
lis1=list(tup1) 
lis2=list(tup2) 
while count<=len(lis1): 
    for i in lis1: 
     if i in lis2: 
      lis1.remove(i) 
      lis2.remove(i) 
    count+=1 
    return tuple(lis1+lis2) 

print(removeCommonElements((1,2,3,4), (3,4,5,6))) 

我需要输出为(1, 2, 5, 6),我得到的输出为(1, 2, 4, 4, 5, 6)。 我无法找到我的错误。谁能帮帮我吗? 谢谢Pyschools删除常见元素

回答

2

这是缩进。缩进如下:

def removeCommonElements(tup1,tup2): 
    count=0 
    lis1=list(tup1) 
    lis2=list(tup2) 
    while count<=len(lis1): 
     for i in lis1: 
      if i in lis2: 
       lis1.remove(i) 
       lis2.remove(i) 
     count+=1 
    return tuple(lis1+lis2) 

print(removeCommonElements((1,2,3,4), (3,4,5,6))) 
+0

纯粹的讽刺...哈哈,虐待编辑它。 – enginefree 2013-08-07 00:21:56

+0

我认为缩进只是OP的一个错字。错误不在于此。 – zhangyangyu 2013-08-07 00:40:05

1
for i in lis1: 
     if i in lis2: 
      lis1.remove(i) 
      lis2.remove(i) 

你的这部分代码是通过列表循环,而同时修改它。所以4被遗漏了。你可以使用set来做到这一点:

>>> def removeCommon(x, y): 
...  x = set(x) 
...  y = set(y) 
...  return tuple(set.union(x, y)-set.intersection(x, y)) 
... 
>>> a = (1,2,3,4) 
>>> b = (3,4,5,6) 
>>> removeCommon(a, b) 
(1, 2, 5, 6)