2010-03-02 3 views
1

J'ai deux fichiers que j'ai chargés dans des listes. Le contenu du premier fichier est quelque chose comme ceci:Comparer deux éléments de listes en python

d.complex.1 
23 
34 
56 
58 
68 
76 
. 
. 
. 
etc 
d.complex.179 
43 
34 
59 
69 
76 
. 
. 
. 
etc 

Le contenu du second fichier est également identique mais avec des valeurs numériques différentes. S'il vous plaît considérer d'un d.complex. * À un autre complexe. * Comme un ensemble.

Maintenant, je suis intéressé à comparer chaque valeur numérique d'un ensemble de premier fichier avec chaque valeur numérique des ensembles dans le deuxième fichier. Je voudrais enregistrer le nombre de fois où chaque numérique est apparu dans le deuxième fichier globalement.

Par exemple, le nombre 23 de d.complex.1 aurait pu apparaître 5 fois dans le fichier 2 sous différents ensembles. Tout ce que je veux faire est d'enregistrer le nombre d'occurrences du nombre 23 dans le fichier 2, y compris tous les ensembles de fichier 2.

Mon approche initiale consistait à les charger dans une liste et à les comparer, mais je ne suis pas capable d'y parvenir. J'ai cherché dans google et suis tombé sur des ensembles mais étant un python noob, j'ai besoin de quelques conseils. Quelqu'un peut-il m'aider?

Si vous pensez que la question n'est pas claire, faites-le moi savoir. J'ai collé le dossier complet 1 et le fichier 2 ici:

http://pastebin.com/mwAWEcTa http://pastebin.com/DuXDDRYT

Répondre

1

d'abord créer une fonction qui permet de charger un fichier donné, comme vous pouvez maintenir des jeux individuels et aussi veulent compter l'apparition de chaque nombre, mieux serait d'avoir un dict pour le fichier entier où les clés sont définies par exemple les noms complex.1 etc, pour chaque keep une autre dict pour les numéros dans le jeu, ci-dessous le code explique mieux

def file_loader(f): 
    file_dict = {} 
    current_set = None 
    for line in f: 
     if line.startswith('d.complex'): 
      file_dict[line] = current_set = {} 
      continue 

     if current_set is not None: 
      current_set[line] = current_set.get(line, 0) 

    return file_dict 

Maintenant, vous pouvez facilement écrire une fonction qui comptera un nombre file_dict donné

def count_number(file_dict, num): 
    count = 0 
    for set_name, number_set in file_dict.iteritems(): 
     count += number_set.get(num, 0) 

    return count 

par exemple, voici un exemple d'utilisation

s = """d.complex.1 
10 
11 
12 
10 
11 
12""" 

file_dict = file_loader(s.split("\n")) 
print file_dict 
print count_number(file_dict, '10') 

sortie est:

{'d.complex.1': {'11': 2, '10': 2, '12': 2}} 
2 

Vous devrez peut-être améliorer le chargeur de fichiers, par ex. ignorer les lignes vides, convertir en int etc.

+0

Eh bien, si c'était un fichier, ma tâche aurait été facile, mais je dois comparer deux listes :( – forextremejunk

+0

Je ne comprends pas, pourquoi ne pouvez-vous pas charger les deux fichiers, obtenir la dict d'eux et faire ce que vous vouloir faire avec ceux qui dictent, comparent, comptent les entiers, se croisent les ensembles etc etc –

2

Ouvrez le fichier à l'aide de la fonction open de Python, puis parcourez toutes ses lignes. Vérifiez si la ligne contient un nombre, si c'est le cas, augmentez son nombre dans une instance defaultdict comme décrit here.

Répétez cette opération pour l'autre fichier et comparez les dicts résultants.

Questions connexes