Функция sorted() в Python3

Python3 内置函数Встроенные функции Python3


Описание

sorted()Функция выполняет операции сортировки над всеми итерируемыми объектами.

Разница между sort и sorted:

sort — это метод, применяемый к спискам, тогда как sorted может выполнять сортировку всех итерируемых объектов.

Метод sort списка работает с существующим списком, тогда как встроенная функция sorted возвращает новый список, а не работает с исходным.

Синтаксис

Синтаксис sorted:

sorted(iterable, key=None, reverse=False)  

Описание параметра:

  • iterable -- итерируемый объект.
  • key — в основном используется для сравнения элементов, имеет только один параметр. Параметр конкретной функции берётся из итерируемого объекта и указывает элемент в итерируемом объекте, который будет использоваться для сортировки.
  • reverse — правило сортировки: reverse = True для убывающего порядка, reverse = False для возрастающего порядка (по умолчанию).

Возвращаемое значение

Возвращает заново отсортированный список.

Пример

В следующем примере демонстрируется простейшее использование sorted:

>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]                      # по умолчанию — возрастающий порядок

Вы также можете использовать метод list.sort() списка. Этот метод изменяет исходный список (возвращает None). Обычно этот метод менее удобен, чем sorted() — если исходный список не нужен, list.sort() немного эффективнее.

>>> a=[5,2,3,1,4]
>>> a.сортировка()
>>> a
[1,2,3,4,5]

Ещё одно различие: метод list.sort() определён только для списков, тогда как функция sorted() может принимать любой итерируемый объект.

>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]

Используйте key для сортировки в обратном порядке

>>> example_list = [5, 0, 6, 1, 2, 7, 3, 4]
>>> result_list = sorted(example_list, key=lambda x: x*-1)
>>> print(result_list)
[7, 6, 5, 4, 3, 2, 1, 0]
>>>

Для сортировки в обратном порядке также можно передать третий параметр reverse=True:

>>> example_list = [5, 0, 6, 1, 2, 7, 3, 4]
>>> sorted(example_list, reverse=True)
[7, 6, 5, 4, 3, 2, 1, 0]

Ниже приведён более сложный пример — сортировка таблицы медалей. Данные содержат сведения о золотых, серебряных и бронзовых медалях для 15 стран, используя\nв качестве разделителя:

Пример

s = "Германия 10 11 16\nИталия 10 10 20\nНидерланды 10 12 14\nФранция 10 12 11\nВеликобритания 22 21 22\nКитай 38 32 18\nЯпония 27 14 17\nСША 39 41 33\nОлимпийский комитет России 20 28 23\nАвстралия 17 7 22\nВенгрия 6 7 7\nКанада 7 6 11\nКуба 7 3 5\nБразилия 7 6 8\nНовая Зеландия 7 6 7"
stodata = s.split('\n',-1)

# Используйте sorted
para = {}

for line in range(len(stodata)):
    # Каждая строка данных
    data = stodata[line].split(' ')
    print(data)
    # Собрать структуру данных para={'China': [], 'Russia': []}
    para[data[0]] = [int('-' + i) for i in data[1:]]
# Начать сортировку (x
new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
print()

c=[]
for i in new_para:
     c.append((i[0]))
for j in range(15):
    print(f"{(j+1):2d}  {c[j]}")

Результат вывода:

['德国', '10', '11', '16']
['意大利', '10', '10', '20']
['荷兰', '10', '12', '14']
['法国', '10', '12', '11']
['英国', '22', '21', '22']
['中国', '38', '32', '18']
['日本', '27', '14', '17']
['美国', '39', '41', '33']
['俄罗斯奥委会', '20', '28', '23']
['澳大利亚', '17', '7', '22']
['匈牙利', '6', '7', '7']
['加拿大', '7', '6', '11']
['古巴', '7', '3', '5']
['巴西', '7', '6', '8']
['新西兰', '7', '6', '7']

 1  美国
 2  中国
 3  日本
 4  英国
 5  俄罗斯奥委会
 6  澳大利亚
 7  荷兰
 8  法国
 9  德国
10  意大利
11  加拿大
12  巴西
13  新西兰
14  古巴
15  匈牙利

Python3 内置函数Встроенные функции Python3

Другие расширения