Python: сортировка этого списка - PullRequest
1 голос
/ 24 октября 2010
`li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))]`

Я хочу отсортировать li в зависимости от первого числа в каждом элементе, например, 1106257, 1, 1,1,9,1,406

Как это сделать быстро?Спасибо

Ответы [ 3 ]

2 голосов
/ 24 октября 2010
>>> li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))]
>>> li.sort()
>>> li
[(1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (1, (64, 64, 126)), (9, (249, 249, 249)), (406, (247, 247, 251)), (1106257, (255, 255, 255))]

Поведение по умолчанию при сравнении кортежей состоит в том, чтобы сначала сравнивать первый, затем второй и т. Д. Вы можете переопределить это, задав пользовательскую функцию сравнения в качестве аргумента для sort ().

2 голосов
/ 24 октября 2010

вы пробовали li.sort() или sorted(li)?

1 голос
/ 24 октября 2010

Что вы спрашиваете, это поведение по умолчанию при сравнении кортежей. Тем не менее, общий ответ на ваш вопрос может быть:

>>> import operator

>>> li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))]
>>> li.sort(key=operator.itemgetter(0))
>>> li
[(1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (1, (64, 64, 126)),
 (9, (249, 249, 249)), (406, (247, 247, 251)), (1106257, (255, 255, 255))]

Если вы хотите выполнить сортировку по столбцам, отличным от первого (0), измените это число. Например, если вы хотите отсортировать по столбцам 2, а затем 1, вы должны указать operator.itemgetter(2, 1) как key.

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