Reputation: 689
Why am I unable to perform this operation? I have below 2 lists, nested and of unequal size. I learned that I need to convert lists to sets (hashable) and then perform comparison, but I don't get the output of the comparison (like get the common element) I tried below methods
list1 = [[u'i2_instance_floating_ip_association'], [u'i1_v1_instance_volume_attach']]
list2 = [[u'i2_instance_floating_ip_association', u'i2_v1_instance_volume_attach'], [u'i1_instance_floating_ip_association', u'i1_v1_instance_volume_attach']]
list1 = map(tuple, list1)
list2 = map(tuple, list2)
print(set(list1) & set(list2))
gives output set()
or
for item in list1:
if item in list2:
print(item)
gives nothing
fin = [i for i in list1 if i in list2]
print("fin", fin)
gives fin []
Upvotes: 1
Views: 68
Reputation: 85522
The problem is the nesting. You have to work all the way down to the elements. For example:
for item in list1:
for list2_item in list2:
if item[0] in list2_item:
print(item)
Output:
['i2_instance_floating_ip_association']
['i1_v1_instance_volume_attach']
Another approach would be flatten both lists first and convert them into sets:
flat1 = set(x[0] for x in list1)
flat2 = set(y for x in list2 for y in x)
print(flat1 & flat2)
Output:
{'i1_v1_instance_volume_attach', 'i2_instance_floating_ip_association'}
Add some prints for debugging and learning what happens:
for item in list1:
print('item', item)
for list2_item in list2:
print('list2_item', list2_item)
if item[0] in list2_item:
print(' found', item[0], 'in', list2_item)
else:
print(' did not find', item[0], 'in', list2_item)
Output:
item ['i2_instance_floating_ip_association']
list2_item ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach']
found i2_instance_floating_ip_association in ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach']
list2_item ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach']
did not find i2_instance_floating_ip_association in ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach']
item ['i1_v1_instance_volume_attach']
list2_item ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach']
did not find i1_v1_instance_volume_attach in ['i2_instance_floating_ip_association', 'i2_v1_instance_volume_attach']
list2_item ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach']
found i1_v1_instance_volume_attach in ['i1_instance_floating_ip_association', 'i1_v1_instance_volume_attach']
Upvotes: 1