Getting sorting order
Peter Otten
__peter__ at web.de
Mon Jun 30 06:06:53 EDT 2008
leodp wrote:
>
>> Or provide a better explanation and an example. Do you mean something
>> like this?
>>
>
> Hi Peter,
> a small example:
>
> master=[1,4,3,2]
> slave1=['d','c','b','a']
> slave2=[1,2,3,4]
>
> master.sort() # this is ok, but does not return infos on how the list
> was sorted
> slave1.sort(key=_maybe_something_here_referring_to_master_)
> slave2.sort(key=_maybe_something_here_referring_to_master_)
>
> Then I should get:
> master=[1,2,3,4]
> slave1=['d','a','b','c']
> slave2=[1,4,3,2]
>
>
> Hope it is more clear now.
> Thanks, leodp
You need a helper list (called master_index in the example below):
>>> master=[1,4,3,2]
>>> slave1=['d','c','b','a']
>>> slave2=[1,2,3,4]
>>> master_index = range(len(master))
>>> master_index.sort(key=master.__getitem__)
>>> master[:] = [master[i] for i in master_index]
>>> slave1[:] = [slave1[i] for i in master_index]
>>> slave2[:] = [slave2[i] for i in master_index]
>>> master
[1, 2, 3, 4]
>>> slave1
['d', 'a', 'b', 'c']
>>> slave2
[1, 4, 3, 2]
If you don't care about list object identity you can use
master = [...] instead of master[:] = [...] etc.
Peter
More information about the Python-list
mailing list