Compare lists to find common elements in python
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Python - Intersection of two lists
我试图比较两个列表,以找出它们有共同点的元素的数量。
我遇到的主要问题是,当任何一个列表包含重复的元素时,例如
1 2 | A = [1,1,1,1] and B = [1,1,2,3] |
使用代码
1 2 3 4 5 | n = 0 for x in A: if x in B: n += 1 print n |
给出了
我想得到
谢谢
不完全清楚您的规范是什么,但是如果您希望
1 2 3 4 5 6 7 8 | >>> from collections import Counter >>> A = [1,1,1,1] >>> B = [1,1,2,3] >>> C = Counter(A) & Counter(B) >>> sum(C.itervalues()) 2 >>> list(C.elements()) [1, 1] |
以下是一种不使用集合的高效(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def count_common(a, b): ret = 0 a = sorted(a) b = sorted(b) i = j = 0 while i < len(a) and j < len(b): c = cmp(a[i], b[j]) if c == 0: ret += 1 if c <= 0: i += 1 if c >= 0: j += 1 return ret print count_common([1,1,1,1], [1,1,2,3]) |
如果您的列表总是按示例中的顺序排序,那么您可以删除两个
对于这个问题,有一种完全不同的思考方式。
假设我有两个词,
将原始对象的长度(确保保存了一份副本)与新生成的对象进行比较,您将看到2个不同的值,表示2个常用字母。
所以您希望程序检查两个列表中相同索引的元素是否相同?这将非常简单:只需迭代两个数组的长度(我假设两个数组的长度应该相同),比如使用变量i,然后通过a.index(i)和b.index(i)函数对每个数组进行比较。如果你愿意,我可以把密码贴出来。
如果这不是你想做的,请把你的问题弄清楚。