sort.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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]].append(driver[1])
  60. for key, value in new_dict.items():
  61. new_dict[key] = sum(value)/len(value)
  62. new_list = [[key, value] for key, value in new_dict.items()]
  63. new_list = sorted(new_list, key=lambda x: (-x[1], x[0].lower()))
  64. for item in new_list:
  65. print(f'{item[0]} {item[1]}')
  66. def print_statistic(lst):
  67. new_dict = {}
  68. for autor in lst:
  69. if autor[0] not in new_dict.keys():
  70. new_dict[autor[0]] = set()
  71. new_dict[autor[0]].add(autor[1])
  72. else:
  73. new_dict[autor[0]].add(autor[1])
  74. for key, value in new_dict.items():
  75. new_dict[key] = len(value)
  76. new_list = sorted(new_dict.items(), key=lambda x: (-x[1], x[0].lower()))
  77. for item in new_list:
  78. print(f'Количество уникальных комментаторов у {item[0]} - {item[1]}')
  79. # print(new_list)
  80. # print(new_dict)
  81. # new_list = []
  82. # for key, value in new_dict.items():
  83. # new_list
  84. def set_test():
  85. my_set = set()
  86. for i in range(5):
  87. my_set.add(i)
  88. for i in range(5):
  89. my_set.add(i)
  90. print(my_set)
  91. def main():
  92. # test_1()
  93. # test_2()
  94. # test_3()
  95. # marks = [('English', 88), ('Science', 90), ('Maths', 97), ('Physics', 93), ('History', 82)]
  96. # marks = [('English', 88), ('Science', 100), ('Maths', 81), ('Physics', 100), ('History', 82), ('Music', 100)]
  97. # marks = [('english', 100), ('Science', 100), ('maths', 100),
  98. # ('Physics', 100), ('history', 100), ('Music', 100)]
  99. # print_results(marks)
  100. # lines = [(5, 6), (5, 4), (1, 0), (0, -1), (1, 2), (2, 1)]
  101. # print(get_sort_lines(lines))
  102. # get_sort_lines(lines)
  103. """
  104. models = [{'make': 'Nokia', 'model': 2, 'color': 'Black'},
  105. {'make': 'Mi Max', 'model': 3, 'color': 'red'},
  106. {'make': 'Samsung', 'model': 5, 'color': 'Yellow'},
  107. {'make': 'Apple', 'model': 10, 'color': 'RED'},
  108. {'make': 'Oppo', 'model': 9, 'color': 'Red'},
  109. {'make': 'Huawei', 'model': 4, 'color': 'BLACK'},
  110. {'make': 'Honor', 'model': 3, 'color': 'black'},
  111. {'make': 'Nothing Phone', 'model': 7, 'color': 'Yellow'}]
  112. print_goods(models)
  113. """
  114. """
  115. laureates = {'За лучший фильм': 'Все везде и сразу',
  116. 'За лучшую музыку к фильму': 'На Западном фронте без перемен',
  117. 'За лучший звук': 'Топ Ган: Мэверик',
  118. 'За лучшие визуальные эффекты': 'Аватар: Путь воды',
  119. 'За лучший дизайн костюмов': 'Топ Ган: Мэверик',
  120. 'За лучшую операторскую работу': 'На Западном фронте без перемен',
  121. 'За лучший монтаж': 'Все везде и сразу',
  122. 'За лучший оригинальный сценарий': 'Все везде и сразу',
  123. 'За лучший фильм на иностранном языке': 'Все везде и сразу', }
  124. print_best_and_worst_laureate(laureates)
  125. """
  126. """
  127. drivers = [
  128. ('Зина', 5),
  129. ('Зина', 3),
  130. ('Гермиона', 4),
  131. ('Гермиона', 4),
  132. ('александр', 4),
  133. ]
  134. print_order_rating(drivers)
  135. """
  136. data = [
  137. ('7', 'opushka'),
  138. ('1', 'opushka'),
  139. ('2', 'opushka'),
  140. ('3', 'opushka'),
  141. ('2', 'opushka'),
  142. ('1', 'opushka'),
  143. ('2', 'opushka'),
  144. ('5', 'opushka'),
  145. ('6', 'opushka'),
  146. ('6', 'opushka'),
  147. ]
  148. # print_statistic(data)
  149. # print(set_test.__code__)
  150. # print(set_test.__code__.co_varnames)
  151. # print(set_test.__code__.co_argcount)
  152. if __name__ == '__main__':
  153. main()