2016-11-10 3 views
0
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 

Ich möchte alle übereinstimmenden Elemente zwischen list1 und list2 finden. Wenn ich list1 und list2 mit Counter ändere, wird es nicht alle Elemente finden, sondern zeigt nur ein Element.Wie finden Sie alle Elemente beim Vergleich zweier Listen?

Dies könnte alle Elemente anzeigen, aber ich kann nicht finden, wie viele Elemente.

+0

Gibt es einen anderen Teil Ihres Codes, der zeigt, wie Sie das tun: "Wenn ich list1 und list2 mit counter"? Wenn nicht, was ist die erwartete Ausgabe und was ist die Ausgabe, die Sie bekommen? – nvioli

+0

es gibt keinen anderen Teil, weil ich das Ergebnis nicht mitnehmen kann. wenn ich sie ändere, oder wenn nicht, ist die Ausgabe ein Übereinstimmungselement, aber nur einmal angezeigt, tatsächlich gibt es viele gleiche Elemente. Wenn list1 1,1,1 haben und wenn list2 1 dann will ich 1,1,1 .. ich nehme 1,1,1 aber wenn value> 2 funktioniert nicht – ronald

Antwort

0

Gehen Sie durch list1 und überprüfen Sie, ob das Element in list2 enthält, und überschreiben Sie die equals/hashcode-Methode in der Klasse, die die Liste enthält.

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(); 
} 
+0

danke für deine antwort aber Liste matchedElement = new ArrayList (); SyntaxError: Ungültige Syntax. und ich schrieb newArrayList es ist OK. aber für (ClassA a: list1) {SyntaxError: ungültige Syntax. Ich konnte nicht reparieren und ich bin neu mit Python und diese Codes scheint sehr schwierig für mich. Ich habe keine sehr Informationen, um diese Codes zu verstehen. – ronald

+0

Für Python müssen Sie möglicherweise einen anderen Thread im Stackoverflow sehen. – sahoora

+0

[link] http://stackoverflow.com/questions/16138015/checking-if-all-the-elements-in-one-list-are-also-in-another – sahoora