Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
List comparison in Python
#1
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...
Reply
#2
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
Reply
#3
this is the last part of my script and i am stuck...
Reply
#4
(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])
Reply
#5
@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
Reply
#6
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.
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#7
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.
Reply
#8
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'}
Reply
#9
This does not give the desired output !!
Reply
#10
(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
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Photo String comparison in a csv file in Python Pandas fleafy 2 1,163 Nov-18-2022, 09:38 PM
Last Post: fleafy
  LIST or ARRAY Comparison and change of value nio74maz 0 1,706 Dec-21-2020, 05:52 PM
Last Post: nio74maz
  Python greater than equal to comparison operator Ilangos 4 2,427 Sep-26-2020, 03:53 AM
Last Post: buran
  Comparison Operator "is" idle vs python command spisatus 3 2,792 Oct-29-2019, 10:00 PM
Last Post: DeaD_EyE
  iterate through a list with comparison of expression Alexandro 6 3,421 Jan-31-2019, 05:16 PM
Last Post: Scorpio
  Python 2.7 LooseVersion version comparison unexpectedly fails kwutzke 5 4,146 Nov-27-2018, 10:23 AM
Last Post: kwutzke
  List comparison in Python Nirmal 4 3,085 Sep-26-2018, 06:23 PM
Last Post: nilamo
  rpm version comparison in python asad 3 3,772 Jul-27-2018, 01:00 PM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020