2012-10-31 7 views
-1

J'ai des difficultés avec un devoir. J'essaie de déterminer si une liste de mots est contenue dans une liste de caractères.Comparaison de listes de Python

Par exemple:

([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], ['ANT', 'BOX', 'SOB', 'TO']) 

Je suis en train de déterminer combien de fois la liste des mots est dans les deux autres listes. (Il doit revenir 3) (« ANT », « SOB », et « TO »)

Les premières listes finiront par être affichés comme ceci: (Oui, il lit des mots dans les deux colonnes et lignes)

ANTT 
XSOB 

il sera ensuite plus de deux listes.

Comment puis-je cela?

+1

Convertir tous les mots à 'set's et juste Comparez-les. 'set ('bonjour') == set ('elho')' – Blender

+0

ce qui manquerait tout ce qui avait des lettres en double ... –

+0

Le PO doit vérifier quels mots sont dans les lignes et les colonnes d'une table; Je ne vois pas comment faire des sets et perdre l'ordre aiderait. –

Répondre

0

Comme il est un devoir me laisser expliquer ce qui doit se produire. Dans votre code ci-dessus vous avez une liste de listes Si mon Python est correct, la première chose à faire est de construire les mots que vous cherchez basé sur les listes qui sont des caractères uniques. Par exemple votre liste de ['A', 'N', 'T'] devrait produire un mot de ANT. Maintenant, une fois que vous avez les mots que vous recherchez, vous devez vérifier la liste des mots complétés. Dans votre exemple ci-dessus, ce serait l'élément final de la liste. Donc, vous prenez votre liste newWords et passez en revue si elle est contenue par le dernier élément du originalList. S'il est trouvé incrémenter le compteur foundWords par 1.

0

quelque chose comme ceci: en utilisant all().

In [73]: lis1 
Out[73]: [['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']] 

In [74]: lis2 
Out[74]: ['ANT', 'BOX', 'SOB', 'TO'] 

In [75]: [x for x in lis2 if (any(x in "".join(y) for y in lis1) or any(x in "".join(k) for k in zip(*lis1)))] 
Out[75]: ['ANT', 'SOB', 'TO'] 
+0

étant devoirs, ne semble-t-il pas un peu avancé? – Woot4Moo

+0

Je ne pense pas que cela réponde à la question du PO. –

+0

@LevLevitsky vous avez raison, j'ai mal lu la question. mis à jour ma solution. –

1

Vous pouvez générer des chaînes de lignes et de colonnes:

In [1]: data = ([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], ['ANT', 'BOX', 'SOB', 'TO']) 

In [2]: rows = [''.join(s) for s in data[0]] 

In [3]: rows 
Out[3]: ['ANTT', 'XSOB'] 

In [4]: cols = [''.join(s) for s in zip(*data[0])] 

In [5]: cols 
Out[5]: ['AX', 'NS', 'TO', 'TB'] 

Vérifiez ensuite quels mots sont dans les cordes:

In [6]: for word in data[1]: 
    if any(word in s for s in rows+cols): 
     print word # you can increment your counter here as well 
    ...:   
ANT 
SOB 
TO