Python Forum

Full Version: List comparison in Python
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
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...
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
this is the last part of my script and i am stuck...
(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])
@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
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.
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.
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'}
This does not give the desired output !!
(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
Pages: 1 2