¿Cómo comparar elementos de una matriz?

publicado por: Anonymous

Tengo este ejercicio: “Leer una matriz 4×6 entera y determinar si alguno de sus números está repetido al menos 3 veces.”

Lo que tengo hasta el momento es esto:

"""
Este programa lee una matriz 4x6 entera y determina si alguno de sus números
está repetido al menos 3 veces.
"""

# Declaración de constantes.
Nfil = 4  # Número de filas de la matriz.
Ncol = 6  # Número de columnas de la matriz.


def crear_matriz(f, c):

""" Crea una matriz con f filas y c columnas con elementos ingresados por el
    usuario.

    crear_matriz(f, c)

    Parámetros de entrada:
        f = Número de filas que tiene la matriz.
        c = Número de columnas que tiene la matriz.

    Retorna una lista de listas (Matriz).
"""

m = [[None for i in range(c)] for j in range(f)]
# El siguiente ciclo anidado primero toma una fila y luego va columna a
# columna y va agregando en cada posición el número que el usuario ingresa.
for fila in range(f):
    for columna in range(c):
        while True:
            try:
                num = int(input("n[{0}][{1}] Ingrese un entero:   "
                                .format(fila+1, columna+1)))
                if type(num) == int:
                    break  # Saldra del ciclo para pedir un nuevo número.
            except ValueError:
                print("nERRORnPor favor solo ingrese números enteros")
        m[fila][columna] = num  # Agrega el entero ingresado a la matriz.
return m


############################## Programa principal ##############################

# Se guardan las matrices creadas con los enteros que ingresó el usuario.
matriz = crear_matriz(Nfil, Ncol)

# El siguiente ciclo anidado primero toma una fila y luego va columna a
# columna leyendo en cada posición el número que el usuario ingresó. (Matriz_1)

for fila in range(Nfil):
    for columna in range(Ncol):
        Comparador = int(matriz[fila][columna])

No sé cómo seguir para comparar en cada cada elemento de la matriz, les agradecería su ayuda es urgente.

solución

Python dispone de una clase Counter que almacena los elementos como claves del diccionario y sus ocurrencias como valores del diccionario. Para poder utilizarlo debes importarlo del módulo collections:

from collections import Counter

Para poder utilizar la matriz directamente en el objeto Counter hay que aplanarla primero (o almacenar directamente los números en una lista secuencialmente). Para transformar la matriz en una lista puedes utilizar una lista por comprensión:

list = [i for x in matriz for i in x]

Ahora sólo es necesario crear un contador:

count = Counter(list)

E iterar los elementos del diccionario resultante para mostrar los que tengan más de 3 ocurrencias:

for i in count.keys():
    if count[i] >= 3:
        print("El elemento %d está repetido %d veces" % (i, count[i]))

Si quieres prescindir de la clase Counter, simplemente debes iterar la matriz e ir almacenando en un diccionario el número de veces que aparece cada elemento:

count = dict()
for i in range(Nfil):
    for j in range(Ncol):
        if count.get(matriz[i][j]) == None:
            count[matriz[i][j]] = 0
        count[matriz[i][j]] += 1
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *