Wayne wrote:
Hi,
I have a set of data that looks something like this:
3, 4, 3, 2, 1
2, 1, 1, 1, 1
4, 2, 2, 1, 2
1, 3, 1, 1, 1
I want to be able to sort it by the first column, keeping the rest of
the values in the same position relative to the original:
1, 3, 1, 1, 1
2, 1, 1, 1, 1
3, 4, 3, 2, 1
4, 2, 2, 1, 2
and I'm wondering if there are any included ways to sort data like this.
I've currently got a 2d list by columns, but I could easily convert that
to rows if it would work better.
if you have data like this:
mylist = [
[3, 4, 3, 2, 1],
[2, 1, 1, 1, 1],
[4, 2, 2, 1, 2],
[1, 3, 1, 1, 1],
]
you can use mylist.sort(key=lambda x: x[0])
sorted(mylist, key=lambda x: x[0]) works as well if you need a new list
if your data is like this:
mylist = [
[3, 2, 4, 1],
[4, 1, 2, 3],
[3, 1, 2, 1],
[2, 1, 1, 1],
[1, 1, 2, 1],
]
you can use zip(*mylist) to transform your data to row-first list, sort
using the above method, then zip(*mylist) again. Beware that
zip(*mylist) returns a list of tuples even if the original data is list
of lists. I think there should be an easier (and faster) way, that
others can point out.
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor