2012-10-20 66 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