@CasperIsNotAGoodGhost

Номер строки, содержащей максимальное число одинаковых элементов?

Здравствуйте. Помогите решить задачу. Дана матрица NxM со случайными числами. Необходимо вывести номер строки, содержащей максимальное число одинаковых элементов.
Я сделал так:
import random
M,N = 5,5
matrix = [[random.randrange(0,10) for i in range(M)] for j in range(N)]
print(matrix)
povtor = []
for i in matrix:
   for j in i:
      if i.count(j) > 1:
         povtor.append(matrix.index(i))
print(povtor)

Если число встречается больше одного раза, то добавляю номер этой строки в отдельный список (для каждого числа)
Получается как то так:

[[7, 9, 4, 8, 2], [9, 5, 1, 8, 1], [5, 4, 5, 8, 7], [6, 5, 6, 4, 6], [6, 3, 3, 7, 6]]
[1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

Как теперь вывести номер строки где числа повторяются максимальное количество раз?
Или можно проще решить эту задачу?
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 3
@SwitcherN
Начинаю изучать python
Могу предложить немного другой вариант. Можно каждую строчку запихать в set(). Тогда строчка, которая имеет минимальную длину (минимальное число уникальных значений) искомая. То есть set(matrix[1]) вернет (9,5,1,8), а set(matrix[4]) вернет (6, 3, 7).

min_unique_num = M # Задаем стартовое минимальное значение уникальных чисел в строчке равной длине строки
searching_row = int() #Переменная, куда будем писать номер строки с наибольшим количеством повторов

for i in range(0, M):
    if len(set(matrix[i])) < unique_num_in_row: # Если количество уникальных элементов в строке меньше, чем во всех предыдущих, то...
        unique_num_in_row = len(set(matrix[i])) # Пишем новое минимальное значение в переменную
        searching_row = i # Запоминаем номер строки как искомый

return searching_row # Возвращаем номер строки, либо можно вернуть саму строку matrix[searching_row]
Ответ написан
import random
from collections import Counter

M, N = 5, 5
matrix = [[random.randrange(0, 10) for _ in range(M)] for _ in range(N)]

# Посчитали количество повторов
result = {
    i: sum(v for v in Counter(sub_list).values() if v > 1)
    for i, sub_list in enumerate(matrix)
}
print(result)

# А дальше что нужно то и выводите.
print(sorted(result, key=lambda key: result[key], reverse=True))
print(max(result, key=lambda key: result[key]))
Ответ написан
longclaps
@longclaps
from collections import Counter

matrix = [[9, 2, 7, 1], [1, 7, 0, 4], [3, 7, 6, 3], [4, 7, 1, 6]]  # незачем сопли жевать
idx = max(range(len(matrix)), key=lambda i: Counter(matrix[i]).most_common(1)[0][1])
for i, row in enumerate(matrix):
    print(row, end='*\n' if i == idx else '\n')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 150 000 до 250 000 руб.
BestDoctor Москва
от 120 000 до 150 000 руб.
YLab Тольятти
от 90 000 до 150 000 руб.