minidave2014
minidave2014

Reputation: 13

Creating a program that compares two lists

I am trying to create a program that checks whether items from one list are not in another. It keeps returning lines saying that x value is not in the list. Any suggestions? Sorry about my code, it's quite sloppy.

Searching Within an Array

Putting .txt files into 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

Main Code

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

Upvotes: 0

Views: 63

Answers (2)

DeepSpace
DeepSpace

Reputation: 81604

Instead of lists, read the files as sets:

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}

Then all you need to do is to calculate the symmetric difference between them:

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

An extracted example:

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

Note that if you are operating with sets, information about how many times an element is present will be lost. If you care about situations when an element is present in barcodes 3 times, but only 2 times in EAN_staging, you should use Counter from collections.

Upvotes: 3

Clay
Clay

Reputation: 124

Your code doesn't seem to quite answer your question. If all you want to do is see which elements aren't shared, I think sets are the way to go.

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

Upvotes: 0

Related Questions