когда я начинаю цикл, цикл становится 0,0,1,2,3.. вместо 0,1,2,3

#python #python-3.x #list #for-loop

Вопрос:

 if __name__ == '__main__':

    l=[]
    s=[]
    for _ in range(int(input())):
        name = input()
        score = float(input())
        l.append(name)
        s.append(score)
    mx=max(s[0],s[1])
    smin=min(s[0],s[1])
    n=len(s)
    for i in range(2,n):
        if(mx>s[i]):
            smin=mx
            mx=s[i]
        elif(s[i]<smin) and 
        max!=s[i]:
         smin=s[i]
    ind=smin
    sminval=s.index(ind)
    g=0
    for i in range(n):
        index_sec=s.index(s[i])
        print(index_sec)
        if(smin==s[i])and
         sminval!=index_sec:
            x=s[i]   
        g=g 1
    y=l[sminval]
 

вход

 5
Harry
37.21
Berry
37.210
Tina
37.2
Akriti
41
Harsh
39
 

выход

 0
0
2
3
4    
 

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

Комментарии:

1. Что такое mx и smin должно содержать? Я не понимаю логики в if утверждениях, которые их устанавливают.

2. index() возвращает индекс первого совпадающего значения. Если у вас есть дубликаты в списке, вы получите самый низкий индекс из них.

3. Ваш список имеет 37.21 индексы 0 и 1, поэтому он печатается 0 дважды.

Ответ №1:

Это не очень структурированный код, поэтому трудно понять, чего вы действительно хотите от него. Я не могу это исправить для тебя. Однако, если вы хотите знать, что происходит, вот пошаговое руководство.

Строка « index_sec=s.index(s[i]) » вернет первый индекс в списке «s», соответствующий значению, найденному в местоположении i. Это будет уникальный индекс только в том случае, если все оценки s уникальны.

Тем не менее, у Гарри и Берри оба имеют оценки «37,2». Поэтому, когда вы посмотрите индекс оценки Гарри, и вы посмотрите значение оценки Берри, вы не получите Гарри и Берри… вы получите тот, который будет первым в списке… Гарри в данном случае… оба раза.

Чтобы сформулировать это по-другому, когда вы берете счет Гарри и смотрите его, вы получаете Гарри. Но когда вы берете оценку Берри и смотрите ее, вы также получаете Гарри, так как Гарри-первый пункт в списке, у которого есть эта оценка. Поскольку Гарри находится в индексе 0, это приводит к «0», за которым следует «0».

Комментарии:

1. дело в том, что мне нужно найти второе минимальное значение, а также нужно найти, есть ли у кого-нибудь такой же второй балл, так что я использовал цикл для проверки, есть ли у кого-нибудь такое же значение, как у Гарри. В этом я получаю ошибку, о которой я упоминал выше

2. Технически вы не получаете ошибку. То, что вы получаете, — это поведение, которого вы не ожидали. Однако вы на самом деле не объяснили общую цель кода и причину неправильного вывода… поэтому невозможно прокомментировать правильный способ исправления кода.

3. Возможно, не самый элегантный способ, но если вы все еще работаете над этим, один из способов-не использовать метод «индекса» списка, чтобы найти то, что вы хотите. Вместо этого запрограммируйте свою собственную функцию. Ваша пользовательская функция может возвращать все совпадения, а не первое совпадение, а затем вы можете изменить свой код, чтобы ожидать список ответов, а не одно значение.

Ответ №2:

Будучи полностью честным, я также понятия не имею, что происходит, какова цель. Все, что я могу сказать, это то, что вы неправильно использовали метод max() и min (). То, что вы ищете, — это наибольшее и наименьшее значение между первым пунктом списка s и вторым пунктом списка s. То, что вы имели в виду, это :

 mx=max(s[0],s[len(s)-1])
smin=min(s[0],s[len(s)-1])
 

Однако и это было бы неверно, так как это проверяло бы только между первым и последним пунктом. Но вы хотите самый большой из всех предметов.
Таким образом, правильный синтаксис:

 mx=max(s)
smin=min(s)
 

Кроме того, я действительно не могу помочь, так как понятия не имею, какова область действия кода.

Комментарии:

1. дело в том, что мне нужно найти второе минимальное значение, поэтому я использовал mx, чтобы найти максимальное значение первых двух чисел аналогично smin для минимального значения первых двух чисел. затем я использовал цикл for, чтобы найти второе минимальное значение. затем, после того как я снова использовал для поиска, есть ли какое-либо число, такое же, как второе минимальное значение. в этом я получаю ошибку, о которой я упоминал выше. извините, я совершенно новичок в python ,