Начните считать индексы с 1 вместо 0 списка - PullRequest
1 голос
/ 30 октября 2019

Я создал программу для получения максимального значения списка и позиции его вхождений (список начинается с индексации с 1, а не с 0), но мне не удается найти какие-либо полезные решения. Ввод всегда представляет собой строку чисел, разделенных на ноль.

Это мой код:

inp = list(map(int,input().split()))
m = max(inp)
count = inp.count(m)
print(m)
def maxelements(seq): # @SilentGhost
    return [i for i, j in enumerate(seq) if j == m]
print(maxelements(inp))

Я ожидаю вывести максимальное значение, а затем все позиции его вхождений. (также можно обойтись без скобок, как в примере ниже?)

Ввод: 4 56 43 45 2 56 8

Выход: 56

2 6

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Спецификация start=1 с enumerate():

>>> l = [4, 56, 43, 45, 2, 56, 8]
>>> max_num = max(l)
>>> [i for i, e in enumerate(l, start=1) if e == max_num]
[2, 6]

По умолчанию enumerate() использует start=0, поскольку индексы начинаются с 0.

1 голос
/ 30 октября 2019

Если вы хотите сместить значения индекса, вы можете просто сделать

return [i + 1 for i, j in enumerate(seq) if j == m]

в более общем смысле любое преобразование i или j!

def f(i, j):
    # do whatever you want, and return something
    return i + 1

return [f(i, j) for i, j in enumerate(seq) if j == m]

Без скобок в виде строки:

return " ".join(str(i + 1) for i, j in enumerate(seq) if j==m) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...