Сортировка столбцов в таблице (список списков) с сохранением соответствия строк - PullRequest
4 голосов
/ 01 июля 2011

Например:

list1 = ['c', 'b', 'a']
list2 = [3, 2, 1]
list3 = ['11', '10', '01']
table = [list1, list2, list3]

Я бы хотел отсортировать по первому столбцу (list1), но я бы хотел, чтобы в окончательном порядке все еще сохранялись строки (поэтому после сортировки у меня все еще будет строка 'b', 2, ' 10' ). В этом примере я мог бы просто отсортировать каждый список по отдельности, но с моими данными я не могу просто сделать это. Что такое питонический подход?

Ответы [ 2 ]

6 голосов
/ 01 июля 2011

Один быстрый способ - использовать zip:

>>> from operator import itemgetter
>>> transpose = zip(*table)
>>> transpose.sort(key=itemgetter(0))
>>> table = zip(*transpose)
>>> table
[('a', 'b', 'c'), (1, 2, 3), ('01', '10', '11')]
1 голос
/ 01 июля 2011
# Get a list of indexes (js), sorted by the values in list1.
js = [t[1] for t in sorted((v,i) for i,v in enumerate(list1))]

# Use those indexes to build your new table.
sorted_table = [[row[j] for j in js] for row in table]

См. этот вопрос для получения информации о том, как Python сортирует список кортежей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...