1
votes

Comment compter les éléments de l'ensemble de données se compose d'une liste

Il existe un exemple de jeu de données A = [[1,3,5], [2,3,5]] Je veux connaître la fréquence de chaque élément 1,2,3,5 en utilisant la fonction Counter.

Je veux obtenir le résultat de Counter ('3': 2, '5': 2, '1': 1, '2': 2)


5 commentaires

Cette syntaxe n'est pas valide: A = {[1,3,5], [2,3,5]}


donc je veux dire qu'il existe un ensemble de données composé d'une liste et je veux connaître la fréquence de l'élément sur l'ensemble de données


Le compteur n'est pas une fonction, c'est un dictionnaire à usage spécial.


Comment l'ensemble de données est-il défini?


La valeur 2 apparaît une seule fois, pas deux fois


4 Réponses :


1
votes

Essayez ceci en utilisant Counter:

Counter({1: 1, 3: 2, 5: 2, 2: 1})

le résultat sera:

from collections import Counter

A = [[1,3,5],[2,3,5]]
result = Counter([i for j in A for i in j])


1 commentaires

Je t'en prie. Veuillez cocher le bouton gris à côté de la réponse et le mettre en vert :) @tedsong



0
votes

Je pense que vous voulez dire une liste de liste?

A = [[1,3,5], [2,3,5]]

si oui , vous pouvez utiliser numpy pour transformer cela en un tableau aplati

import numpy
#turn A into a numpy array
arr =numpy.array(A)
#get the unique values and their counts - ravel flattens an array
unique,counts = numpy.unique(arr.ravel(),return_counts=True)
my_counts = dict(zip(unique,counts))
my_counts
>>>{1: 1, 2: 1, 3: 2, 5: 2}


0 commentaires

0
votes

Counter prend en charge l'ajout et la somme intégrée a un paramètre start , c'est-à-dire l'élément 0 pour les entiers. Un élément zéro pour les compteurs est simplement Counter () . Vous pouvez donc résoudre ce problème via

Counter({1: 1, 3: 2, 5: 2, 2: 1})

donne

from collections import Counter
from functools import reduce

A = [[1,2,5], [2, 3, 5]]
counters = [Counter(l) for l in A]
reduce(lambda x,y: x+y, counters)

Cela peut également être résolu en termes de réduction de carte, où carte est l'application de Counter.

Counter({1: 1, 3: 2, 5: 2, 2: 1})

gives

from collections import Counter
A = [[1,2,5], [2, 3, 5]]
sum(Counter(l) for l in A, Counter())


0 commentaires

1
votes

Tout d'abord, les listes ne sont pas hachables, donc A ne doit pas être un ensemble. Faisons donc une liste de listes.

Ensuite, nous appliquons Counter à la séquence obtenue en chaînant les sous-listes.

Ne réinventez jamais la roue: itertools fournit d'excellentes solutions p>

Counter({3: 2, 5: 2, 1: 1, 2: 1})

Produit

import collections as co
import itertools as it

A = [[1,3,5],[2,3,5]]
cnt = co.Counter(it.chain.from_iterable(A))
print(cnt)


0 commentaires