Sorting a list to by another's order

Duncan Booth duncan at NOSPAMrcp.co.uk
Fri Aug 30 16:07:52 CEST 2002


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

> 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):
	try:
		return bList.index(aVal), aVal
	except:
		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 rcp.co.uk
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