Steven Bethard wrote: > Here's a solution that makes use of the key= argument to sorted(): > > >>> A = ['hello','there','this','that'] > >>> B = [3,4,2,5] > >>> indices = range(len(A)) > >>> indices.sort(key=B.__getitem__) > >>> [A[i] for i in indices] > ['this', 'hello', 'there', 'that'] > > Basically, it sorts the indices to A -- [0, 1, 2, 3] -- in the order > given by B, and then selects the items from A in the appropriate order. > >
That's impressive. I'm sure like a lot of other people I looked at the question and thought it ought to be possible to use key to get this result without a load of zipping and unzipping but just couldn't quite see it. If you combine your technique with 'sorted', you get the one line version: >>> [A[i] for i in sorted(range(len(A)), key=B.__getitem__)] ['this', 'hello', 'there', 'that'] -- http://mail.python.org/mailman/listinfo/python-list