比较两个列表时如何查找所有元素?

时间:2016-11-10 15:54:20

标签: list compare counter

import Counter
import collections
import itertools, collections

List1=[('1234', '5678', 9101112, 131415, 161716, 19), ('1234', '5678', 9101112, 131415, 161716, 19), ('1723113685', '1958120268', 704338729, 1310973186, 38760, 80), ('1723113685', '1958120268', 704338729, 1310973186, 38760, 70), ('1234', '5678', 9101112, 131415, 161716, 19), ('19216813', '6311624397', 3851697578, 0, 58816, 80), ('6311624397', '19216813', 2747564191, 3851697579, 890, 58816), ('19216813', '6311624397', 3851697579, 2747564192, 58816, 80), ('1234', '5678', 9101112, 131415, 161716, 19), ('19216813', '6311624397', 3851698039, 2747565640, 58816, 50)]

List2=[('1723113685', '1958120268', 704338729, 1310984130, 38760, 80), ('1723113685', '1958120268', 704338729, 1310985498, 38760, 80), ('1723113685', '1958120268', 704338729, 1310986866, 38760, 80), ('1723113685', '1958120268', 704338729, 1310973186, 38760, 80), ('6311624397', '19216813', 2747564192, 3851697579, 80, 58816), ('19216813', '6311624397', 3851698039, 2747564192, 58816, 80), ('19216813', '6311624397', 3851698039, 2747565640, 58816, 80), ('1234', '5678', 9101112, 131415, 161716, 19), ('19216813', '6311624397', 3851698039, 2747568536, 58816, 80), ('19216813', '6311624397', 3851698039, 2747569984, 58816, 80), ('19216813', '6311624397', 3851698039, 2747571432, 58816, 80), ('19216813', '6311624397', 3851698039, 2747572880, 58816, 80)]


ab=[]
abDict = Counter(ab) 
for x in List1:
    if x in List2:

    ab.append(x)

for key, value in abDict.items():
    if value>2:
    print key 

我想在list1list2之间找到所有匹配的元素。当我用计数器更改list1list2时,它找不到所有元素,但只显示匹配一个元素。

这可以显示所有元素,但我找不到多少元素。

1 个答案:

答案 0 :(得分:0)

浏览list1并检查list2中是否包含元素,并在列表所包含的类中重写equals / hashcode方法。

List<ClassA> list1 = [a1, a2];
List<ClassA> list2 = [a3, a4];

List<ClassA> matchedElement = new ArrayList<ClassA>();
for (ClassA a: list1) {
   if (list2.contains(a)){
     matchedElement.add(a); 
   }
}

System.out.println(matchedElement);

public Class ClassA {
@Override
    public boolean equals(Object obj) {
//compare objects values from A
}

@Override
    public int hashCode() {
final int prime = 31;
int result = 1;
        result = prime
                * result + obj.hashCode();
}