es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo almacenar todos los valores de una lista de listas y la frecuencia de su aparición, así como su índice?

idnt = []
idntfrq = []

for i in range(len(occ)):
    idnt.append([])
    idntfrq.append([])
    for j in range(len(occ[i])):
        for j2 in range(j,len(occ[i])):
            for d in occ[i][j]:
                idnt[i].append(d)
                idntfrq[i].append([j])
                occ[i][j].remove(d)
                for d2 in occ[i][j2]:
                    if d == d2:
                        idntfrq[i][-1].append(j2)
                        occ[i][j2].remove(d)

Necesito el número de apariciones de cada valor, así como sus índices.

La lista de listas es occ (50 listas adentro con varias longitudes cada una).

El pensamiento era iterar sobre todo, almacenar cada valor en la lista idnt[i] y el
índice de la lista en la que aparece en la lista idntfrq[i], y luego eliminar el
elemento de la lista de la iteración actual. Después de eso, la lista occ debería estar vacía,
pero no lo está, subí una captura de pantalla de occ[0][0] para mostrar a qué me refiero: imagen

NOTA: Cada lista dentro de una lista contiene cada elemento solo una vez, pero quiero contar las
apariciones en todas las listas dentro de cada occ[i] (para i en 50) y también mantener el índice.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código contiene bucles anidados múltiples que iteran sobre la lista occ. Crea dos listas vacías idnt e idntfrq. Luego, itera sobre cada elemento de occ y, para cada elemento, agrega una lista vacía a idnt e idntfrq. Luego, itera sobre cada par de índices en occ[i] y, para cada par, verifica si el mismo elemento existe en ambos índices. Si existe, agrega el índice de la segunda ocurrencia a idntfrq[i]. Finalmente, elimina el elemento común de ambos índices en occ[i].

    Para obtener el número de apariciones de cada valor, así como sus índices, puedes usar un objeto Counter del módulo collections. Así es cómo puedes modificar el código para lograr eso:

    from collections import Counter
    
    idnt = []
    idntfrq = []
    
    # Combina todos los elementos en occ en una lista única
    all_occ = [elem for sublist in occ for elem in sublist]
    
    # Usa Counter para obtener el conteo de cada elemento
    counts = Counter(all_occ)
    
    for i in range(len(occ)):
        idnt.append([])
        idntfrq.append([])
    
        for j in range(len(occ[i])):
            for d in occ[i][j]:
                idnt[i].append(d)
                idntfrq[i].append([j, counts[d]])
    

    Este código primero combina todos los elementos en occ en una lista única llamada all_occ. Luego, usa Counter para obtener el conteo de cada elemento, que se almacena en la variable counts.

    La siguiente parte del código es la misma que antes. Iteramos sobre cada elemento de occ y, para cada elemento, agregamos una lista vacía a idnt e idntfrq. Luego, iteramos sobre cada índice en occ[i] y, para cada índice, iteramos sobre cada elemento en el índice. Para cada elemento, lo agregamos a idnt[i] y también agregamos el índice del índice actual y el conteo del elemento en all_occ a idntfrq[i].

    Este código modificado debería darte el número de apariciones de cada valor, así como sus índices.

Comments are closed.