2016-09-19 38 views
3

我是新来的蟒蛇,我想获得关于我的功能的建议。我想要做的是以下。我有2个列表A和B.(例如A = [1,2,3,4,5],B = [4,3,2,1])我想创建一个函数,它可以找到值在列表B中不存在,所以在这种情况下5.所以在这种情况下5.蟒蛇 - 从多个列表中查找不匹配的值

我写了一个函数在下面,但它不工作,我无法弄清楚代码中有什么问题....任何人都可以帮助我了解什么是bug?这看起来很简单,但对我来说很困难。感谢您的帮助!!

def finder(arr1,arr2): 
    arr1 = sorted(arr1) 
    arr2 = sorted(arr2) 

    eliminated = [] 

    for x in arr1: 
     if x not in arr2: 
      eliminated = eliminated.append(x) 
     else: 
      pass 
    return eliminated 
+0

更改此'消除= eliminated.append(x)的'本'eliminated.append(X)' – idjaw

+0

和也:http://stackoverflow.com/questions/642763/python-intersection-of-双列表 –

+0

'frozenset(a) - frozenset(b)' - 这将产生一个不可变的集合,可以用作迭代器,它将包含所有不在b中的项目。请注意,副作用将是'a'或'b'中的任何重复项不会出现,也不会被保留。 –

回答

3

.append()方法将修改原始列表。下面一行

eliminated = eliminated.append(x) 

更改为

eliminated.append(x) 

你也不需要你的列表进行排序。

+0

谢谢!正如你所提到的,我改变了我的代码但该功能仍然无法正常工作。它不会返回任何内容......任何想法? – yusuke0426

+1

@ yusuke0426您很可能不打印方法调用的返回。简单地调用你的方法不会输出任何东西。你*返回*你的结果,但实际上并没有打印任何东西。只需拨打打印电话 – idjaw

+0

@ yusuke0426就可以了:https://repl.it/Dc1p – Selcuk

3

这里有三种不同的方式来做到这一点。第一种方法使用集合差异,第二种使用内置过滤器功能,第三种使用列表理解。

Python 2.7.12 (default, Jul 9 2016, 12:50:33) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> A=[1,2,3,4,5] 
>>> B=[4,3,2,1] 
>>> def a(x,y): 
... return list(set(x)-set(y)) 
... 
>>> a(A,B) 
[5] 
>>> def b(x,y): 
... return filter(lambda A: A not in y, x) 
... 
>>> b(A,B) 
[5] 
>>> def c(x,y): 
... return [_ for _ in x if _ not in y] 
... 
>>> c(A,B) 
[5] 
+1

你的第一个技巧(正确)使用集合差异,而不是交集。 – smarx

+1

对不起,看电视,同时回答堆栈溢出问题。谢谢你的提高,我会纠正它。 –