Sorting a list to by another's order

Duncan Booth duncan at
Fri Aug 30 16:07:52 CEST 2002

Graeme Longman <glongman at> wrote in 
news:mailman.1030713827.13913.python-list at

> Hi,
> I have two lists:
> listA = ['d', 'c', 'f', 'a', 'b', 'e']
> listB = ['a', 'c', 'd', 'f']
> I need to sort listA so that it's order corresponds to that of listB (if
> the item in listA isn't in listB then it should be at the end of the
> list)
> Is there a quick way to do this using sort() instead of writng a bunch
> of for loops and if-else statements ?

How about this?

>>> import sys
>>> listA = ['d', 'c', 'f', 'a', 'b', 'e']
>>> listB = ['a', 'c', 'd', 'f']
>>> def ordering(aVal, bList):
		return bList.index(aVal), aVal
		return sys.maxint, aVal

>>> tmp = [ ordering(v, listB) for v in listA ]
>>> tmp.sort()
>>> listA = [ v for (i, v) in tmp ]
>>> print listA
['a', 'c', 'd', 'f', 'b', 'e']

Duncan Booth                                             duncan at
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?

More information about the Python-list mailing list