Автор оригинала: Robin Andrews.
Вот a Python Programming Вызов для вас, чтобы помочь вам разработать свои навыки решения проблем и алгоритмии.
Найдите положение максимального значения в списке питона целых чисел.
Некоторые из вас могут знать, что Python имеет функцию Макс () Для этого для вас, но я хочу, чтобы вы думали о том, как вы реализуете эту функцию для себя.
Вот пример:
Вы можете увидеть из изображения, что самый высокий Пик это Значение 9 на Положение 3 Отказ Быть действительно ясно о том, рассматриваете ли вы позицию против значения элемента в списке Действительно важно И можете сэкономить вам много умственных усилий и времени, потраченных в отладку по сравнению с тем, что если вы смешиваете две вещи в том, что вы думаете. Есть Статья об этом здесь , который вы можете найти полезным.
Для целей этого упражнения предположим, что ваш список содержит неотрицательные целые числа Отказ Некоторые ингредиенты вам нужно будет решать эту проблему
- Зацикливаться через список
- Доступ к значениям в списке в данном индексе
- Выбор (
Если ... else ...Блоки) - Сравнение (вероятно
>)
Если вы не очень сильны с этими основаниями, вы можете пересмотреть их, прежде чем пытаться эту проблему. В интернете есть множество ресурсов, которые вы могли бы использовать для этого. Один, я думаю, вы нашли бы особенно полезно Час Python Отказ
Прежде чем писать какой-либо настоящий код, подумайте о том, как вы подойдете к проблеме. Сделайте некоторые заметки, возможно, на бумаге или даже в бланке Python Файл в качестве комментариев ( # Это комментарий Python ). Этот второй вариант – отличный способ приблизиться к этим видам проблемы, поскольку вы думаете о ингредиентах решения, а также получить базовый проект структуры бесплатно. Как только у вас есть эти комментарии, вы можете начать писать ваше решение в качестве фактического кода под каждым комментарием. (Вы, конечно, должны немного перемещать вещи с вашего первоначального «чернового» решения.)
Вы можете увидеть пример того, что эти комментарии могут выглядеть, нажав на «Показать решение» ниже. Попробуйте наметить алгоритм самостоятельно, прежде чем посмотреть.
# Подумайте о любых переменных, которые вам понадобятся# Предположить, что первый элемент - максимум для начала# Следите за положением максимального значения# Петли через оставшиеся предметы и сравните их максимум (что вы называете этой переменной?)# Если текущее значение больше, обновите максимальную переменную позиции
В зависимости от вашего уровня опыта с программированием Python эта проблема может быть легкой или довольно сложной. Это хорошо. Просто сделайте то, что вы можете, и когда вы либо получили решение, либо пробовали так же сложно, как вы хотите, проверьте мое решение ниже.
Чтобы поддержать вас сфокусированным, имейте в виду конкретный пример для этого упражнения.
Например, определить ART = [2, 3, 1, 9, 6, 8] И напишите код, чтобы найти максимальное значение в этом списке, что является 9 в положении 3 Отказ Некоторые версии этого упражнения хотят фактической стоимости (который будет 9 здесь), но здесь я хочу найти позиция высшей ценности. Если существует более одного экземпляра самого высокого значения, найдя только один из позиций, в которых оно происходит в списке, в порядке. После того, как у вас есть решение, обязательно проверьте еще несколько примеров списков.
Найти глобальный максимум списка с Python
arr = [2, 3, 1, 9, 6, 8]
pos_of_max = 0
for i in range(1, len(arr)):
if arr[i] > arr[pos_of_max]:
pos_of_max = i
print(pos_of_max)
И вот версия с использованием функции вместе с некоторыми основными тестами с использованием Python’s Assert утверждение.
def find_global_maximum(arr):
length = len(arr)
if length < 1:
return None
pos_of_max = 0
for i in range(1, len(arr)):
if arr[i] > arr[pos_of_max]:
pos_of_max = i
return pos_of_max
arr = []
assert find_global_maximum(arr) is None
arr = [3]
assert find_global_maximum(arr) == 0
arr = [2, 3, 1, 9, 6, 8]
assert find_global_maximum(arr) == 3
arr = [1, 2, 3, 4, 5, 0]
assert find_global_maximum(arr) == 4
arr = [1, 2, 3, 3, 2]
assert find_global_maximum(arr) == 2 # The algorithm checks from left to right, so the fist instance is returned.
Для тех из вас, кто знает о Линейный поиск и Сложность времени Этот алгоритм имеет то же самое Сложность времени Как худший случай линейного поиска, где целевой элемент находится в конце списка. Этот уровень сложности времени технически упоминается как O (n) (Но не волнуйтесь вообще об этом, если вы еще не изучали сложность времени). Алгоритм должен проверить весь список «быть уверенным», что было найдено максимальное значение.
С наилучшими не несортированным массивом нет возможности найти максимум быстрее. Поскольку вы не знаете, какой элемент является самым большим и наименьшим, вы должны посмотреть на них все. Однако, если мы сначаем отсортируем список, используя эффективный алгоритм сортировки, такой как Сортировка слияния Затем нахождение максимального значения становится так же просто, как нахождение последнего элемента в отсортированном списке.
Эта версия может быть реализована так:
arr = [2, 3, 1, 9, 6, 8]
arr = sorted(arr)
print("The sorted list is", arr)
print("The maximum value is at position", str(len(arr) - 1))
Я надеюсь, что вы нашли эту проблему интересным и полезным. Счастливые вычисления!