Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Работа с массивами питухона

Андрей Ученик (136), открыт 2 дня назад
Задача такая:
вводится количество строк после первой и на этих строках целые числа, все разные
нужно сделать массив из этих чисел, поменять наибольшее и наименьшее числа и вывести этот массив
 m = [int(input()) for num in range(int(input()))]  

m[m.index(min(m))], m[m.index(max(m))] = m[m.index(max(m))], m[m.index(min(m))]

print(m)
вроде всё правильно, работает с такими входными данными:
 5 
7
2
6
-4
1
но при следующих он просто ничего не меняет:
 18
-448
-706
-191
512
605
-955
-762
873
652
-145
-493
-297
-616
505
-932
-195
414
895
Вот что тут ему мешает поменять шестой и последний элемент?
2 ответа
Анонимус Мудрец (16042) 2 дня назад
 n = int(input()) 
m = [int(input()) for _ in range(n)]

min_val = min(m)
max_val = max(m)

min_index = -1
max_index = -1

# Находим *все* индексы минимального и максимального элементов
min_indices = [i for i, x in enumerate(m) if x == min_val]
max_indices = [i for i, x in enumerate(m) if x == max_val]

# Меняем местами значения по первому найденному индексу
if min_indices and max_indices:
m[min_indices[0]], m[max_indices[0]] = m[max_indices[0]], m[min_indices[0]]

print(m)
АндрейУченик (136) 2 дня назад
да то что переписать можно это понятно, мне интересно что именно в моём решении не правильно
Анонимус Мудрец (16042) Андрей, проблема в том, что ваш код предполагает, что наибольшее и наименьшее значения в списке m являются уникальными. Если наибольшее или наименьшее значение встречается более одного раза, m.index(min(m)) и m.index(max(m)) будут возвращать индекс первого вхождения наименьшего и наибольшего элементов соответственно. Это приводит к тому, что обмен не происходит корректно, если есть дубликаты.
Матвей Юноша Ученик (8) 2 дня назад
n = int(input())
m = [int(input()) for _ in range(n)]

min_val = min(m)
max_val = max(m)

min_index = -1
max_index = -1

# Находим *все* индексы минимального и максимального элементов
min_indices = [i for i, x in enumerate(m) if x == min_val]
max_indices = [i for i, x in enumerate(m) if x == max_val]

# Меняем местами значения по первому найденному индексу
if min_indices and max_indices:
m[min_indices[0]], m[max_indices[0]] = m[max_indices[0]], m[min_indices[0]]

print(m)
Похожие вопросы