compare list

Brian van den Broek broek at cc.umanitoba.ca
Tue Nov 15 04:29:57 EST 2005


Shi Mu said unto the world upon 2005-11-15 01:30:
>>Hey Ben,
>>
>>first, as expected, the other two answers you received are better. :-)
>>
>>Sets are much better optimized for things like membership testing than
>>are lists. I'm not competent to explain why; indeed, I keep
>>overlooking them myself :-(

<snip discussion of my (Brian) first list-based code>

>>
>>Best,
>>
>>Brian vdB
> 
> is it possible to modify the codes to compare the two lists with not
> necessarily consecutive numbers?
> For example,
> lisA=[1,2,5,9]
> lisB=[9,5,0]
> compare A and b will get true because the two lists have 5 and 9
> together though they are indifferent order.
> Best Regards,
> Robert
> 

Sure, but rather than repair a less than best first approach, better 
to do it with sets:

 >>> lisA=[1,2,5,9]
 >>> lisB=[9,5,0]
 >>> lisC=[9,5,0,1]
 >>> def intersection_has_two(sequence1, sequence2):
         set1, set2 = set(sequence1), set(sequence2)
         return len(set1.intersection(set2)) == 2

 >>> intersection_has_two(lisA, lisB)
True
 >>> intersection_has_two(lisA, lisC)
False

Sets make stuff easy. (I have got to remember that :-) The only reason 
to make that a function is the one liner gets a bit long for my taste:

 >>> len(set(lisA).intersection(set(lisB))) == 2
True
 >>>

Best,

Brian vdB




More information about the Python-list mailing list