Перейти до змісту

Основи сортування даних

При сортуванні даних типу списку списків або списку кортежів, sorted сортує за першим елементом вкладених списків (кортежів), а якщо перший елемент однаковий, за другим:

In [1]: data = [[1, 100, 1000], [2, 2, 2], [1, 2, 3], [4, 100, 3]]

In [2]: sorted(data)
Out[2]: [[1, 2, 3], [1, 100, 1000], [2, 2, 2], [4, 100, 3]]

Якщо сортування робиться для списку чисел, які записані як рядки, сортування буде лексикографічним, не натуральним і порядок буде таким:

In [7]: vlans = ['1', '30', '11', '3', '10', '20', '30', '100']

In [8]: sorted(vlans)
Out[8]: ['1', '10', '100', '11', '20', '3', '30', '30']

Щоб сортування було «правильним», треба перетворити влани на числа.

Ця ж проблема проявляється, наприклад, з IP-адресами:

In [2]: ip_list = ["10.1.1.1", "10.1.10.1", "10.1.2.1", "10.1.11.1"]

In [3]: sorted(ip_list)
Out[3]: ['10.1.1.1', '10.1.10.1', '10.1.11.1', '10.1.2.1']

Як вирішити проблему з сортуванням IP-адрес див. у розділі 10. Корисні функції.