Python Forum
List comparison in Python - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: List comparison in Python (/thread-11985.html)

Pages: 1 2


List comparison in Python - Nirmal - Aug-03-2018

Hi
I have 2 list .I want to compare and get the difference.

a = [['vlan 158', '  name MARKET', '  mode vpc'], []]
b = [['vlan 158', '  name MARKETING', '  mode vpc'], ['vlan 159', '  name SALES', '  mode vpc']]
Expected Output :

Missing in "a"

vlan 159
  name SALES
  mode vpc
please suggest how can it be done?

Note : list "a" has Vlan 158 so as list "b" .So its a MATCH ,though "name" is different.not worried about that...


RE: List comparison in Python - Larz60+ - Aug-03-2018

Is this a homework assignment?
look into using set to do comparisons.
by the way, there's no way the 'code' you show would have a chance of running.
Make an attempt.
hint, use a logical and on two sets


RE: List comparison in Python - Nirmal - Aug-03-2018

this is the last part of my script and i am stuck...


RE: List comparison in Python - Vysero - Aug-03-2018

(Aug-03-2018, 06:45 PM)Nirmal Wrote: this is the last part of my script and i am stuck...

Assuming this is a hw assignment I won't give you the answer but to get you started:

a = [['vlan 158', 'name MARKET', 'mode vpc']]
b = [['vlan 158', 'name MARKETING', 'mode vpc'], ['vlan 159', 'name SALES', 'mode vpc']]

x = a.pop()
y = b.pop()


for i in range(len(y)):
  for j in range(i + 1, len(x)):
    if not(x[i] == y[j]):
      print(x[i],y[j])



RE: List comparison in Python - Nirmal - Aug-04-2018

@Vysero : hey no this is no hw assignment .This i am doing as corporate task.The thing is i cant "pop" as the list content can be extended .It needs to be a generic one . So the first element of "list a" ( e:g vlan 158" in this case ) has to be checked in "list b" and vice versa and if it is found then fine. If it is not found ( e:g vlan 159 ) is not available in "list a" then it should return everything i.e "list a " has below missing
vlan 159 
 name SALES 
 mode vpc



RE: List comparison in Python - wavic - Aug-04-2018

If there are no repeating elements in the lists you can turn them into sets. Here you can see what you can do with sets.


RE: List comparison in Python - Nirmal - Aug-04-2018

i tried

print ("+++++++++++++++++ The missing configuration is++++++++++++++\n")
p = [item for index, item[1] in enumerate(list2) if [] != [it for it in item if it not in list1[index]]]
print('\n'.join(['\n'.join(item[1]) for item in p]))
print ("+++++++++++++++++ The missing configuration is++++++++++++++\n")
q = [item for index, item[1] in enumerate(list1) if [] != [it for it in item if it not in list2[index]]]
print('\n'.join(['\n'.join(item[1]) for item in q]))
output:

+++++++++++++++++ The missing configuration is++++++++++++++

vlan 159
  name SALES
  mode vpc
vlan 159
  name SALES
  mode vpc
+++++++++++++++++ The missing configuration is++++++++++++++
repeated ,.....i am missing something here..please suggest.


RE: List comparison in Python - Larz60+ - Aug-04-2018

Another approach:
>>> a = [['vlan 158', '  name MARKET', '  mode vpc'], []]
>>> b = [['vlan 158', '  name MARKETING', '  mode vpc'], ['vlan 159', '  name SALES', '  mode vpc']]
>>> c = []
>>> d = []
>>> for item in a:
...     c.append(set(item))
... 
>>> for item in b:
...     d.append(set(item))
... 
>>> for n in range(len(c)):
...     print(c[n] & d[n])
... 
{'  mode vpc', 'vlan 158'}



RE: List comparison in Python - Nirmal - Aug-05-2018

This does not give the desired output !!


RE: List comparison in Python - Vysero - Aug-06-2018

(Aug-05-2018, 02:16 PM)Nirmal Wrote: So the first element of "list a" ( e:g vlan 158" in this case ) has to be checked in "list b" and vice versa and if it is found then fine. If it is not found ( e:g vlan 159 ) is not available in "list a" then it should return everything i.e "list a " has below

When you say: "has to be checked in "list b"" are you meaning the first element of "list a" needs to be checked against the first element of each list in "list b"? S/T each matching instance can be ignored but none matching instances will result in a 'print' of the remaining elements in that list? For instance the program would for:
a = [['vlan 158', '  name MARKET', '  mode vpc'], []]
b = [['vlan 158', '  name MARKETING', '  mode vpc'], ['vlan 159', '  name SALES', '  mode vpc']]
produce the output:

#first element of list a matches first element of list b thus ignore
name SALES, mode vpc #first element of list a does not match second element of list b thus print
name MARKETING, mode vpc #second element in list a is an empty list thus will not match first element in list b thus print
name SALES, mode vpc #second element in list a is an empty list thus will not match second element in list b thus print