2016-06-28 15 views
0

Ich versuche ein Programm zu erstellen, das prüft, ob Elemente aus einer Liste nicht in einer anderen Liste sind. Es behält zurück Zeilen sagen, dass X-Wert nicht in der Liste ist. Irgendwelche Vorschläge? Sorry über meinen Code, es ist ziemlich schlampig.Erstellen eines Programms, das zwei Listen vergleicht

innerhalb eines Arrays Suche

Putting TXT-Dateien in Arrays

with open('Barcodes', 'r') as f: 
    barcodes = [line.strip() for line in f] 

with open('EAN Staging', 'r') as f: 
    EAN_staging = [line.strip() for line in f] 

Arrays

list1 = barcodes 
list2 = EAN_staging 

Hauptcode

fixed = -1 

for x in list1: 
    for variable in list1:             # Moves along each variable in the list, in turn 
     if list1[fixed] in list2:           # If the term is in the list, then 
      fixed = fixed + 1 
      location = list2.index(list1[fixed])       # Finds the term in the list 
      print() 
      print ("Found", variable ,"at location", location)    # Prints location of terms 
+0

Sie wollen also wissen, welche Artikel nur in einer der Listen sind? – DeepSpace

+2

Was ist die erste 'for x in list1' Schleife? Scheint keinen Sinn zu ergeben. –

+0

@DeepSpace Nein, ich möchte überprüfen, ob Daten in der Barcodes-Liste nicht in der EAS-Staging-Liste enthalten sind. – minidave2014

Antwort

3

Statt Listen, lesen Sie die Dateien als se ts:

with open('Barcodes', 'r') as f: 
    barcodes = {line.strip() for line in f} 

with open('EAN Staging', 'r') as f: 
    EAN_staging = {line.strip() for line in f} 

Dann alles, was Sie tun müssen, ist die symmetrische Differenz zwischen ihnen zu berechnen:

a = {1, 2, 3} 
b = {3, 4, 5} 
print(a - b) 
>> {1, 2, 4, 5} # 1, 2 are in a but in b 

Beachten Sie, dass, wenn Sie mit Sets arbeiten:

diff = barcodes - EAN_staging # or barcodes.difference(EAN_stagin) 

Ein Beispiel extrahiert , Informationen darüber, wie oft ein Element vorhanden ist, gehen verloren. Wenn Sie sich für Situationen interessieren, in denen ein Element in barcodes 3-mal, aber nur 2-mal in EAN_staging vorhanden ist, sollten Sie Counter von collections verwenden.

0

Ihr Code scheint Ihre Frage nicht ganz zu beantworten. Wenn Sie nur sehen wollen, welche Elemente nicht geteilt werden, denke ich, set s sind der Weg zu gehen.

set1 = set(list1) 
set2 = set(list2) 
in_first_but_not_in_second = set1.difference(set2) # outputs a set 
not_in_both = set1.symmetric_difference(set2) # outputs a set 
Verwandte Themen