2016-12-03 3 views
-1

Я хочу, чтобы отсортировать кортежи, используя этот метод ...Сортировка кортежей Python

Если (a1, b1) < (a2, b2), то a2> a1 или (a1 == a2 и b2> b1).

Алгоритм не должен работать на месте, и ожидается, что он получит числа в диапазоне [0,99].

Input: 
[(9, 7), (78, 24), (17, 74), (53, 81), (40, 43), (79, 82), (84, 46), (68, 53), 
(92, 95), (60, 38), (20, 62), (72, 57)] 
Output: 
[(9, 7), (17, 74), (20, 62), (40, 43), (53, 81), (60, 38), (68, 53), (72, 57), 
(78, 24), (79, 82), (84, 46), (92, 95)] 

Я подумал о используя концепцию подсчета рода, так как временная сложность должна быть O (N), а затем список счетчик длины будет 100 * 100. Это не очень эффективный подход.

Есть ли у вас какие-либо предложения?

+0

Это должно работать из коробки. Попробуйте 'sorted (input_list)'. – Tobias

ответ

1

sorted() встроенная функция должна хорошо работать для вашего случая, он сравнивает первый элемент, и если первый элемент является одинаковым для двух элементов, он сравнивает 2-го элемента и т.д.

В следующем Например, simple_list[0][0] и simple_list[1][0] равны (4 и 4), так и simple_list[0][1]simple_list[1][1] (3 и 5) сравниваются:

>>> simple_list = [(4, 3), (4, 5), (1, 2)] 
>>> sorted(simple_list) 
[(1, 2), (4, 3), (4, 5)] 

в вашем случае, попробуйте следующее:

tuples_list = [(9, 7), (78, 24), (17, 74), (53, 81), (40, 43), (79, 82), (84, 46), (68, 53), (92, 95), (60, 38), (20, 62), (72, 57)] 

sorted_list = sorted(tuples_list) 

Выход:

>>> sorted(tuples_list) 
[(9, 7), (17, 74), (20, 62), (40, 43), (53, 81), (60, 38), (68, 53), (72, 57), (78, 24), (79, 82), (84, 46), (92, 95)] 
Смежные вопросы