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

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

25.03.2021, 14:38. Показов 7947. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru