С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
6 / 4 / 2
Регистрация: 19.03.2021
Сообщений: 25

Поменять местами строки, содержащие минимальный и максимальный элементы матрицы

25.03.2021, 14:38. Показов 7725. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день!

Ранее обращался по данному вопросу, но была другая "специфика"

Необходимо решить задачу:
Дана матрица размера M×N. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#создаем двумерный массив генератором
number_of_rows = int(input("Введите количество строк: ")) 
matrix = [[int(j) for j in input("Введите все элементы одной строки (можно и через пробел): ").split()] for i in range(number_of_rows)]
print("Ваша матрица : ", matrix)
 
for i in range(len(matrix)):
    for j in range(len(matrix[i])): 
        a = matrix.index(min(matrix)) #мин. значение
        b = matrix.index(max(matrix)) #макс. значение 
 
 
matrix[a],matrix[b]=matrix[b],matrix[a] #инвертируем с учетом новых данных
print("Матрица, в которой были изменены строки, содержащие минимальный и максимальный элементы: ", matrix)
Проблемы возникают с 0 и отрицательными числами.

Объясните пожалуйста логические ошибки вышеуказанного кода

Заранее спасибо

Добавлено через 23 минуты
Кажется, сам додумался до истины. Вдруг кому-нибудь понадобится.
функции min и max затруднительно работают с отрицательными числами. Похожий вариант предложили в форуме (когда по своему незнанию спросил про ошибку лямбда функции), но я добавил еще один цикл и вроде все работает. Мы тут ищем не min и max, а сравниваем элементы между собой посредством обычного и надёжного if.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#создаем двумерный массив генератором
number_of_rows = int(input("Введите количество строк: ")) 
matrix = [[int(j) for j in input("Введите все элементы одной строки (через пробел): ").split()] for i in range(number_of_rows)]
print("Ваша матрица : ", matrix)
 
index_min = 0# априори считаем что мин и макс значения находятся в первой строке с индексом 0
index_max = 0  
 
min_el = min(matrix[0]) #еще пара костылей, которые означают, что ищем минимальный и максимальный элементы с первой строки 
max_el = max(matrix[0])
 
for i in range(1, len(matrix)): # первую строку не смотрим мин и макс с нее у нас есть
    for j in range(len(matrix[i])): 
        min_ = min(matrix[i]) # min(abs(matrix[i])) #ищем минимум
        max_ = max(matrix[i]) # max(abs(matrix[i])) #ищем максимум
        
        if min_ < min_el: #если минимум в из даннгой строки меньше минимума с первой (нулевой для Python) 
            min_el = min_ #то обновляем минимум
            index_min = i #фиксируем строку
        
        if max_ > max_el: 
            max_ = max_el
            index_max = i #аналогично для максимума
        
matrix [index_min],matrix[index_max] = matrix[index_max],matrix[index_min] #обновляем матрицу
 
print("Результат: ", matrix)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2021, 14:38
Ответы с готовыми решениями:

Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы
Дана матрица размера M х N. Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы. Помогите пожалуйста ...

Поменять местами максимальный и минимальный элементы матрицы
ввести с клавиатуры массив, состоящий из n строк и m столбцов. Создать библиотеку, в которой будет содержаться функция, которая ...

Найти в матрице максимальный и минимальный элементы, поменять местами строки, в которых они расположены
Помогите пожалуйста написать программу на питоне без использования функций Найти в матрице максимальный и минимальный элементы, поменять...

3
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
25.03.2021, 16:34
Лучший ответ Сообщение было отмечено blackgryph0n как решение

Решение

blackgryph0n,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#создаем двумерный массив генератором
number_of_rows = int(input("Введите количество строк: ")) 
m = [[int(j) for j in input("Введите все элементы одной строки (через пробел): ").split()] for i in range(number_of_rows)]
print("Ваша матрица : ", *m, sep = '\n')
 
mmax = list(map(max,m))
mmin = list(map(min,m))
 
mmax = mmax.index(max(mmax))
mmin = mmin.index(min(mmin))
 
m[mmin],m[mmax]=m[mmax],m[mmin] #инвертируем с учетом новых данных
print("Матрица, в которой были изменены строки, содержащие минимальный и максимальный элементы: ", *m, sep = '\n')
Цитата Сообщение от blackgryph0n Посмотреть сообщение
функции min и max затруднительно работают с отрицательными числами
????????????

Цитата Сообщение от blackgryph0n Посмотреть сообщение
Объясните пожалуйста логические ошибки вышеуказанного кода
Python
1
2
3
4
5
6
for i in range(len(matrix)): #цикл по индексам строк
    for j in range(len(matrix[i])): #цикл по индексам столбцов(j далее не используется)
        a = matrix.index(min(matrix)) #мин. значение впринципе в матрице(что?)
        b = matrix.index(max(matrix)) #вот такой код проверьте min([1,2,3],[3,2,-1])
#то есть вы пишете циклы так, как будто будете просто каждый элемент сравнивать для
#поиска минимума и максимума(что эффективно), но вы просто не знаете что вы делаете
Цитата Сообщение от blackgryph0n Посмотреть сообщение
Кажется, сам додумался до истины
ну да, второй код похож на правду
однако
Цитата Сообщение от blackgryph0n Посмотреть сообщение
добавил еще один цикл и вроде все работает
зачем?
второй цикл явно лишний, вы же min() и max() используете

Добавлено через 2 минуты
а, ну и
Цитата Сообщение от blackgryph0n Посмотреть сообщение
тут ищем не min и max
как раз этим вы тут и занимаетесь
Цитата Сообщение от blackgryph0n Посмотреть сообщение
min_ = min(matrix[i]) # min(abs(matrix[i])) #ищем минимум
        max_ = max(matrix[i]) # max(abs(matrix[i])) #ищем максимум
1
6 / 4 / 2
Регистрация: 19.03.2021
Сообщений: 25
25.03.2021, 20:11  [ТС]
Цитата Сообщение от codcw Посмотреть сообщение
????????????
При вводе отрицательных чисел матрицы он выдает ошибочный результат

Цитата Сообщение от codcw Посмотреть сообщение
зачем?
второй цикл явно лишний, вы же min() и max() используете
хотел чтобы программа полностью "пробегала" по введенным значениям

Цитата Сообщение от codcw Посмотреть сообщение
как раз этим вы тут и занимаетесь
в ходе расследования вышел сам на себя )

Цитата Сообщение от codcw Посмотреть сообщение
ну да, второй код похож на правду
без второго цикла, он работал некорректно
Цитата Сообщение от codcw Посмотреть сообщение
#создаем двумерный массив генератором
number_of_rows = int(input("Введите количество строк: "))
m = [[int(j) for j in input("Введите все элементы одной строки (через пробел): ").split()] for i in range(number_of_rows)]
print("Ваша матрица : ", *m, sep = '\n')
mmax = list(map(max,m))
mmin = list(map(min,m))
mmax = mmax.index(max(mmax))
mmin = mmin.index(min(mmin))
m[mmin],m[mmax]=m[mmax],m[mmin] #инвертируем с учетом новых данных
print("Матрица, в которой были изменены строки, содержащие минимальный и максимальный элементы: ", *m, sep = '\n')
надо бы почитать про функцию map

Спасибо большое, что выделили свое время!

Добавлено через 1 минуту
БОЛЬШОЕ СПАСИБО! никак не мог додуматься до такого отображения матрицы, а тут так красиво...
0
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
26.03.2021, 00:28
Цитата Сообщение от blackgryph0n Посмотреть сообщение
При вводе отрицательных чисел матрицы он выдает ошибочный результат
я же вам давал код, попробуйте
Python
1
2
3
>>> min([5,5,22,2],[4,4])
[4, 4]
>>>
тут хорошо расписано:
https://stackoverflow.com/a/34115735

ещё раз объясняю, в первом коде, на примере, допустим, матрицы 5х5
вы запускаете вложенный цикл по каждому из этих 25 значений
и все 25 раз внутри цикла происходило примерно следующее
Python
1
2
3
4
5
6
a=[[1,2],[3,2],[4,2],[5,2],[6,2]]
for i in range(25):
    _min=a.index(min(a))
    print(_min)
    _max=a.index(max(a))
    print(_max)
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
>>>


Цитата Сообщение от blackgryph0n Посмотреть сообщение
без второго цикла, он работал некорректно
пишите что работало не так, исправим(второй цикл не нужен точно)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2021, 00:28
Помогаю со студенческими работами здесь

Поменять местами столбики, содержащие минимальный и максимальный элементы матрицы
Дана матрица размера 5 x 10. Поменять местами столбики, содержащие минимальный и максимальный элементы матрицы

Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void main () { int i, j, m, n, v, minj=0,maxj=0,t ; printf (&quot;Vvedite...

Поменять местами строки, содержащие минимальный и максимальный элементы матрицы
Дана матрица размера 5х10. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.

Матрицы. Поменять местами строки, содержащие минимальный и максимальный элементы
Дана матрица размера M × N. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.

Поменять местами строки, содержащие минимальный и максимальный элементы матрицы
поменять местами строки, содержащие минимальный и максимальный элементы матрицы. на печать выдать исходные и результирующие данные.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru