@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]

Как теперь вывести номер строки где числа повторяются максимальное количество раз?
Или можно проще решить эту задачу?
  • Вопрос задан
  • 944 просмотра
Пригласить эксперта
Ответы на вопрос 2
@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]))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы