Sorting by item_in_another_list

Steven Bethard steven.bethard at
Thu Oct 26 22:43:40 CEST 2006

Paul Rubin wrote:
> Steven Bethard <steven.bethard at> writes:
>> Cameron Walsh wrote:
>>> Which brings me to the question, would this solution:
>>> B = set(B)
>>> A = B + list(x for x in A if x not in B)
>>> be faster than this solution:
>>> B = set(B)
>>> A.sort(key=B.__contains__, reverse=True)
>> [timings deleted]
>> That said, I'd probably still use the first solution -- it's more
>> immediately obvious why that one works.
> Wait a minute, the first example looks wrong, B has gotten replaced by
> a set and then it's added to a list.

Yep.  If you look back at the lines I actually timed, they were::

     B_set = set(B)
     A = B + list(x for x in A if x not in B_set)


     B_set = set(B)
     A.sort(key=B_set.__contains__, reverse=True)

As you noted, you'll get an error if you try to concatenate B as a set 
to the list.


More information about the Python-list mailing list