-1
votes

Comptez le même élément dans différentes listes

J'aimerais savoir comment vous pouvez compter le nombre de fois que le même élément apparaît dans différentes listes de Python. Le nombre de listes n'est pas déterminé

par exemple: xxx

retournerait un dictionnaire avec xxx


2 commentaires

Qu'avez-vous essayé et quel est le problème avec cela? Ces listes sont-elles censées contenir des chaînes? D'où viennent-ils?


Supposant que votre entrée soit des chaînes, vous pouvez utiliser compteur à partir de collections . Cherchez-le


4 Réponses :


1
votes

Un moyen facile, si vous ne voulez pas importer d'autres outils, il s'agirait d'utiliser un Dictionnaire pour tenir compte.

list_1 = ['house','table','house']
list_2 = ['desk','computer','table'] 

# instantiate a dict that will contain the number of appearances in each list, as a list
appearances = {}

# loop through the first list
for item in list_1:
    # If the item hasn't appeared yet, it will set the item's name as the key and [1, 0] as the value
    # appearances[item] is how we're going to set the key name in appearances
    # appearances.get(item, 0)[0] makes it so that if item is not a key in appearances, it sets the initial value at index 0 to [0, 0]. 
    #   Otherwise, it sets it to +1 of it's current value
    # We set appearances[item] to a list so that we can keep track of appearances in both lists
    # For list_1's first item, appearances would then be equal to: appearances = {'house': [1, 0]}
    appearances[item] = [appearances.get(item, [0, 0])[0] + 1, 0]

# Do the same for the second list, but use index of 1, instead of 0
for item in list_2:
    # We use appearances.get() twice in case we haven't seen the item yet in either list
    appearances[item] = [appearances.get(item, [0, 0])[0], appearances.get(item, [0, 0])[1] + 1]

# Print the result
print(appearances)


2 commentaires

Comment votre algorithme va-t-il s'adapter à la modification du nombre de listes?


@mad_ Ça ne le fait pas et j'étais au courant de cela lors de la rédaction de ma réponse. Cela semblait être une question débutante, alors je suis coincé avec une réponse débutante.



0
votes

Cela avait l'air intéressant alors je l'ai donné un essai. Il fonctionnera avec un nombre arbitraire de listes

{'house': [2, 0], 'computer': [0, 1], 'table': [1, 1], 'desk': [0, 1]}


0 commentaires

0
votes

Vous pouvez créer une fonction qui accepte un nombre arbitraire de listes, que vous traverserez et que vous trouverez chaque élément qui existe, vous compterez le nombre de searys pour chaque liste:

list1 = ['house','table','house']
list2 = ['desk','computer','table']

def countElements(lists):
    elements = set([elem for l in lists for elem in l])
    return dict((element,[l.count(element) for l in lists]) for element in elements)

print(countElements([list1,list2]))


0 commentaires

0
votes

alternative plus verbose mais facile à suivre.

Placez d'abord les listes dans une suérliste contenant: xxx

puis initialiser un dictionnaire ( word_count ) Avec les touches requises (chaque mot apparaissant dans les listes): xxx

Enfin, itérer sur le Word_Count ramassant le nombre de mots rencontrés: < Pré> xxx

maintenant word_count contient: xxx


Tout dans une méthode Pour tout nombre de liste: xxx

0 commentaires