2016-09-19 50 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

對不起,看電視,同時回答堆棧溢出問題。謝謝你的提高,我會糾正它。 –