#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 ,