2017-01-25 10 views
-1

Ich benutze Python und versuche, Daten zwischen Listen zu vergleichen. Liste A werden Daten, die wie folgt aussieht:Der effizienteste Weg zum Vergleichen von Listendaten

A=['perspectiveA', 'perspectiveB', 'perspectiveC']

Und Liste B werden Daten, die wie folgt aussieht:

B=['listB.data.perspectiveA', 'listB.data.perspectiveB', 'listB.data.perspectiveC']

Ich versuche, um sicherzustellen, dass die gesammelten Daten in der Liste A ist in den Daten enthalten, die in der Liste B gesammelt wurden. Ist dies der einzige Weg, um eine verschachtelte for-Schleife zu verwenden? Ich möchte nicht einfach sehen, ob ein Artikel von A in einem der Artikel von B ist, aber ich muss eine 1: 1-Korrelation sicherstellen. Zum Beispiel muss Liste B ein Element enthalten, das enthält 'PerspektiveA', aber nur ein Element.

+0

Die Verwendung von Listen zwingt Sie, hier ineffizient zu sein. –

+0

Ich habe noch nichts versucht, aber mein Gedanke ist, dass ich eine neue Liste aus den Elementen in Liste B erstellen kann, aber mit '.' bis zum letzten Element und vergleichen Sie dann beide Listen als Sätze, um sicherzustellen, dass sie identisch sind. Fühle mich einfach wie eine Pflaster-Lösung. –

Antwort

0

konvertieren beide Listen-Sets:

set('listB.data.' + x for x in A) == set(B) 
# True 
0

Warum nicht die Elemente in einer Ihrer Listen verschieben (Liste A, da es wie die Daten in dieser Liste klingt, ist einzigartig) in einem Wörterbuch, da durch die Suche dass Datentyp ist viel schneller, und Sie können Ihre Zähler auch dort behalten:

listA = ['perspectiveA', 'perspectiveB', 'perspectiveC'] 
listB = ['listB.data.perspectiveA', 'listB.data.perspectiveB', 'listB.data.perspectiveC'] 
dictA = {a:0 for a in listA} 

>>> dictA 
{'perspectiveA': 0, 'perspectiveB': 0, 'perspectiveC': 0} 

for b in listB: 
    value = b.split(".")[2] 
    if value in dictA: 
     dictA[value] += 1 

Irgendwelche Wörterbuch-Elemente, die andere Werte als 1 sind entweder bei Nichterscheinen oder Duplikate haben.

Verwandte Themen