An effective way to compare two lists that remember the origin for each unique item

Given this pattern, which finds unique elements, being available to indicate the source of the element

source_list = ["one", "two", "three", "four", "five"]
diff_list = ["zero", "one", "two", "three", "four", "six", "seven"]

source_unique = []
diff_unique = []

for entry in source_list:
    if entry not in diff_list:
        source_unique.append(entry)

for entry in diff_list:
    if entry not in source_list:
        diff_unique.append(entry)

print("Unique elements in source_list: {0}".format(source_unique))
print("Unique elements in diff_list: {0}".format(diff_unique))

###
# Unique elements in source_list: ['five']
# Unique elements in diff_list: ['zero', 'six', 'seven']

is there a more efficient way to do this instead of using two additional lists and all of this? The main task is to talk about the origin of the elements.

+4
source share
3 answers

Using setand using them difference, which has complexity O(len(set_object)):

>>> s1, s2 = set(source_list), set(diff_list)
>>> s1.difference(s2)
{'five'}
>>> s2.difference(s1)
{'seven', 'six', 'zero'}

which can also be written as:

>>> s1 - s2 
{'five'}
>>> s2 - s1
{'seven', 'six', 'zero'}    

list, list(s1 - s2) list(s2 - s1) .

, list source_list diff_list in:

uniques:

source_unique = [v1 for v1 in source_list if v1 not in set(diff_list)]
source_unique
['five']

diff_unique:

diff_unique = [v1 for v1 in diff_list if v1 not in set(source_list)]
diff_unique
['zero', 'six', 'seven']

O(len(list)), .

+5

:

source_list = ["one", "two", "three", "four", "five"]
diff_list = ["zero", "one", "two", "three", "four", "six", "seven"]


print("Unique elements in source_list: {0}".format(set(source_list)-set(diff_list)))
print("Unique elements in diff_list: {0}".format(set(diff_list)-set(source_list)))

:

Unique elements in source_list: set(['five'])
Unique elements in diff_list: set(['seven', 'six', 'zero'])
+2

You can use kits to do this.

source_list = ["one", "two", "three", "four", "five"]
diff_list = ["zero", "one", "two", "three", "four", "six", "seven"]

source_unique = list(set(source_list) -  set(diff_list))
diff_unique =  list(set(diff_list) -  set(source_list))
+1
source

Source: https://habr.com/ru/post/1650468/


All Articles