sort.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. '''
  2. sorted(iterable, key=None, reverse=False)
  3. Не пусть с методом списка .sort() - этот метод меняет сам список.
  4. Для сортировки словаря по значения используется следующий подход:
  5. for name in sorted(heroes, key=heroes.get):
  6. print(name, heroes[name])
  7. Это чистая функция возвращает новый список.
  8. '''
  9. def test_1():
  10. my_list = ['123', 12, '5', 3, 53]
  11. print(sorted(my_list))
  12. def test_2():
  13. my_list = [1, 123, 12, 15, 10, 18]
  14. print(sorted(my_list, key=lambda x: (-len(str(x)), x)))
  15. def test_3():
  16. my_list = [
  17. (10, 10, 10),
  18. (8, 10, 12),
  19. (6, 12, 9),
  20. (10, 12, 14)
  21. ]
  22. s = sorted(my_list, key=lambda x: (-x[0], -x[2]), reverse=True)
  23. print(s[0])
  24. def print_results(lst):
  25. '''Информация выводится по убыванию оценок, а в случае их равенства
  26. предметы должны выводиться в обратном алфавитном порядке без учета регистра.'''
  27. sorted_lst = sorted(lst, key=lambda x: (x[1], x[0].lower()), reverse=True)
  28. for i in sorted_lst:
  29. print(i[0], i[1])
  30. def get_sort_lines(lst):
  31. 'Сортировка по длине отрезка, затем по координатом первой и второй точки'
  32. return sorted(lst, key=lambda x: (abs(x[1] - x[0]), x[0], x[1]))
  33. def print_goods(lst):
  34. 'Сортировка словаря по двум критериям'
  35. for item in sorted(lst, key=lambda x: (x['color'].lower(), -x['model'])):
  36. # print(f'Производитель: {item['make']}, модель: {item['model']}, цвет: {item['color']}')
  37. print('Производитель: ', item['make'], ', модель: ', item['model'], ', цвет: ', item['color'], sep='')
  38. def print_goods_new(lst):
  39. new_lst = [position.split(': ') for position in lst]
  40. sorted_lst = sorted(new_lst, key=lambda x: (-float(x[1]), x[0].lower()))
  41. for item in sorted_lst:
  42. print(f'{float(item[1]):.2f} - {item[0]}')
  43. def print_best_and_worst_laureate(dct):
  44. new_dict = {}
  45. for key, value in dct.items():
  46. if value not in new_dict.keys():
  47. new_dict[value] = 1
  48. else:
  49. new_dict[value] += 1
  50. sorted_list = sorted(new_dict.items(), key=lambda x: -x[1])
  51. print(sorted_list[0][0], ', ',sorted_list[0][1], sep='')
  52. print(sorted_list[-1][0], ', ',sorted_list[-1][1], sep='')
  53. def print_order_rating(lst):
  54. new_dict = {}
  55. for driver in lst:
  56. if driver[0] not in new_dict.keys():
  57. new_dict[driver[0]] = driver[1]
  58. else:
  59. new_dict[driver[0]] = (new_dict[driver[0]] + driver[1])/2
  60. new_list = [[key, value] for key, value in new_dict.items()]
  61. new_list = sorted(new_list, key=lambda x: -x[1])
  62. for item in new_list:
  63. print(f'{item[0]} {item[1]}')
  64. print(new_list)
  65. # sorted_list = sorted(new_dict, key=new_dict.get)
  66. # print(sorted_list)
  67. # for item in sorted_list:
  68. # print(item)
  69. # for key, value in new_dict.items():
  70. # print(key, value)
  71. def main():
  72. # test_1()
  73. # test_2()
  74. # test_3()
  75. # marks = [('English', 88), ('Science', 90), ('Maths', 97), ('Physics', 93), ('History', 82)]
  76. # marks = [('English', 88), ('Science', 100), ('Maths', 81), ('Physics', 100), ('History', 82), ('Music', 100)]
  77. # marks = [('english', 100), ('Science', 100), ('maths', 100),
  78. # ('Physics', 100), ('history', 100), ('Music', 100)]
  79. # print_results(marks)
  80. # lines = [(5, 6), (5, 4), (1, 0), (0, -1), (1, 2), (2, 1)]
  81. # print(get_sort_lines(lines))
  82. # get_sort_lines(lines)
  83. """
  84. models = [{'make': 'Nokia', 'model': 2, 'color': 'Black'},
  85. {'make': 'Mi Max', 'model': 3, 'color': 'red'},
  86. {'make': 'Samsung', 'model': 5, 'color': 'Yellow'},
  87. {'make': 'Apple', 'model': 10, 'color': 'RED'},
  88. {'make': 'Oppo', 'model': 9, 'color': 'Red'},
  89. {'make': 'Huawei', 'model': 4, 'color': 'BLACK'},
  90. {'make': 'Honor', 'model': 3, 'color': 'black'},
  91. {'make': 'Nothing Phone', 'model': 7, 'color': 'Yellow'}]
  92. print_goods(models)
  93. """
  94. """
  95. laureates = {'За лучший фильм': 'Все везде и сразу',
  96. 'За лучшую музыку к фильму': 'На Западном фронте без перемен',
  97. 'За лучший звук': 'Топ Ган: Мэверик',
  98. 'За лучшие визуальные эффекты': 'Аватар: Путь воды',
  99. 'За лучший дизайн костюмов': 'Топ Ган: Мэверик',
  100. 'За лучшую операторскую работу': 'На Западном фронте без перемен',
  101. 'За лучший монтаж': 'Все везде и сразу',
  102. 'За лучший оригинальный сценарий': 'Все везде и сразу',
  103. 'За лучший фильм на иностранном языке': 'Все везде и сразу', }
  104. print_best_and_worst_laureate(laureates)
  105. """
  106. drivers = [
  107. ('Джек', 2),
  108. ('Джек', 3),
  109. ('Гермиона', 5),
  110. ('Билл', 4),
  111. ('Билл', 4),
  112. ('Гермиона', 3),
  113. ('Джек', 2),
  114. ('ЯЯ', 5),
  115. ('ФФФ', 5),
  116. ('Билл', 4),
  117. ('Укк', 4),
  118. ('Билл', 3),
  119. ('Джек', 2),
  120. ('Джек', 2),
  121. ('Гермиона', 5),
  122. ('Билл', 2),
  123. ('ФФФ', 4),
  124. ('Билл', 3),
  125. ('ФФФ', 3),
  126. ('Джек', 2),
  127. ('Джек', 1),
  128. ('Гермиона', 5),
  129. ('Билл', 2),
  130. ('Курт', 5),
  131. ('Билл', 3),
  132. ]
  133. print_order_rating(drivers)
  134. if __name__ == '__main__':
  135. main()