Как найти наибольшее число (я) в списке элементов, возможно, не уникальных?
Вот моя программа,
item_no = []
max_no = 0
for i in range(5):
input_no = int(input("Enter an item number: "))
item_no.append(input_no)
for no in item_no:
if no > max_no:
max_no = no
high = item_no.index(max_no)
print (item_no[high])
Пример ввода: [5, 6, 7, 8, 8]
Пример вывода: 8
Как я могу изменить свою программу для вывода одинаковых старших чисел в массиве?
Ожидаемый результат: [8, 8]
Ответы
Ответ 1
Просто получите максимальное значение, используя max
а затем его count
и объедините их в список-понимание.
item_no = [5, 6, 7, 8, 8]
max_no = max(item_no)
highest = [max_no for _ in range(item_no.count(max_no))]
print(highest) # -> [8, 8]
Обратите внимание, что это вернет список одного элемента в случае, если ваше максимальное значение появляется только один раз.
Решение, более близкое к вашему текущему стилю программирования, будет следующим:
item_no = [5, 6, 7, 8, 8]
max_no = 0 # Note 1
for i in item_no:
if i > max_no:
max_no = i
high = [i]
elif i == max_no:
high.append(i)
с такими же результатами, как указано выше, конечно.
Заметки
- Я предполагаю, что вы имеете дело только с N * (1, 2,...) числами. Если это не так, следует использовать инициализацию с помощью
-math.inf
.
Обратите внимание, что второй фрагмент кода менее эффективен, чем первый, с большим отрывом. Python позволяет вам быть более эффективным, чем эти явные, подобные фортрану циклы, и он более эффективен, если вы правильно его используете.
Ответ 2
Вы можете сделать это еще короче:
item_no = [5, 6, 7, 8, 8]
#compute once - use many
max_item = max(item_no)
print(item_no.count(max_item) * [max_item])
Выход:
[8, 8]
Ответ 3
Вы могли бы использовать list
для этой задачи следующим образом:
numbers = [5, 6, 7, 8, 8]
maxnumbers = [i for i in numbers if i==max(numbers)]
print(*maxnumbers,sep=',')
выход:
8,8
*
Оператор в print
используются для распаковки значений, sep
используются для информирования print
, что Seperator использовать: ,
в этом случае.
РЕДАКТИРОВАТЬ: Если вы хотите получить индексы с наибольшим значением и вызывать max
только один раз, выполните:
numbers = [5, 6, 7, 8, 8]
biggest = max(numbers)
positions = [inx for inx,i in enumerate(numbers) if i==biggest]
print(*positions,sep=',')
Выход:
3,4
Как вы можете проверить, numbers[3]
равны biggest
а numbers[4]
равны biggest
.
Ответ 4
-
Посчитайте появление максимального числа
-
переберите список, чтобы вывести максимальное число для диапазона счета (1)
Отсюда:
item_no = [5, 6, 7, 8, 8]
counter = item_no.count(max(item_no)) # 2
print([max(item_no) for x in range(counter)])
ВЫХОД:
[8, 8]
Ответ 5
Эта проблема может быть решена в одной строке путем нахождения элемента, который равен максимальному значению: для улучшения производительности сохраните max в var Mvalue = max (item_no) [i for я in item_no if i==Mvalue]
Ответ 6
Я думаю, что было бы лучше, если бы мы оценили max
в массиве и его count
за одну итерацию
def maxs(iterable):
max = None
count = 0
for index, value in enumerate(iterable):
if index == 0 or value >= max:
if value != max:
count = 0
max = value
count += 1
return count * [max]
print (maxs([5, 6, 7, 8, 8])) # [8, 8]
print (maxs([3, 2, 4, 5, 1, 2, 4, 5, 2, 5, 0])) # [5, 5, 5]
print (maxs([])) # []
Попробуйте!