2012-10-20 113 views
1

我需要比較list_a與其他許多人。當其他列表中存在重複項目時(其他列表中有兩個k),我的問題就開始了。如何比較兩個列表與重複項目在一個列表中?

我的目標是過濾出所有列表中的相同項目(最多三個匹配項目)。

list_a = ['j','k','a','7'] 
other_b = ['k', 'j', 'k', 'q'] 
other_c = ['k','k','9','k'] 

>>>filter(lambda x: not x in list_a,other_b) 
['q'] 

我需要一種返回['k','q']的方法,因爲'k'在list_a中只出現一次。

比較list_a和other_c與set()對我的目的不好,因爲它只會返回一個元素:k。而我需要['k','9','k']

我希望我已經夠清楚了。

謝謝

+1

我不完全確定這個比較是什麼。你能解釋一下嗎? – Blender

回答

1

下面的函數返回你想要的,讓list_a作爲第一個參數和other_b當作爲第二新名單:

def my_comp(my_list, other_list): 
    other_cop = other_list[:] 
    for x in my_list: 
     try: 
      other_cop.remove(x) 
     except ValueError: 
      pass 
    return other_cop 

它copys的other_list,並從每一個elemnt my_list從副本。因爲如果要移除的元素不在other_list,remove引發ValueError,我們必須趕上並且對此例外無所作爲。

+0

非常感謝,這非常有幫助! ,我得學習新的東西:) – eladc