Lorsque j'exécute le code suivant:

array1 = ["happy", "sad","good", "bad","like"]
array2=["i like starhub", "i am happy with the starhub service", "starhub is      bad"," this is not awful"]

for i in array1:
    for j in array2:
        if i in j :
            print i

Le résultat imprimé sera

happy
bad
like

La sortie est imprimée selon l'ordre dans lequel ils sont répertoriés dans array1. Comment puis-je trier la sortie en fonction de array2? Je voudrais que la sortie soit:

like
happy
bad
0
kent chan 13 juil. 2015 à 05:55

2 réponses

Meilleure réponse

La réponse de Leb est juste sur l'argent; Merci de voter et de l'accepter.

Je veux juste ajouter une note sur les conventions de dénomination.

Dans de nombreux langages de programmation, les noms de variables i et j sont traditionnellement utilisés pour les index de boucle numérique, mais pas pour les valeurs réelles des éléments d'une liste ou d'un tableau.

Par exemple (jeu de mots), si vous écriviez une boucle for à l'ancienne en JavaScript, cela pourrait ressembler à ceci:

var names = [ "Kent", "Leb", "Dalen" ];
for( var i = 0;  i < names.length;  i++ ) {
    console.log( names[i] );
}

Vous pouvez également écrire du code comme celui-ci en Python, mais comme vous utilisez la boucle Python for plus expressive, vous pouvez utiliser de meilleurs noms que i et j.

Comme le note Dalen dans un commentaire, les noms array1 et array2 ne correspondent pas à la terminologie Python - mais plus important encore, ils ne disent rien sur ce qui est dans ces listes .

Il est utile d'utiliser des noms de variables plus explicites partout. Dans votre code, les deux listes sont une liste de mots et une liste de phrases, et les variables dans les boucles représentent un seul mot et une seule phrase.

Une convention que j'aime ici est d'utiliser un nom pluriel pour une liste ou un tableau, et le nom singulier correspondant pour un élément individuel de cette liste ou tableau.

Vous pouvez donc utiliser des noms comme celui-ci:

words = [ "happy", "sad", "good", "bad", "like" ]
phrases = [
    "i like starhub",
    "i am happy with the starhub service",
    "starhub is bad",
    " this is not awful"
]

for phrase in phrases:
    for word in words:
        if word in phrase:
            print( word )

Voyez-vous à quel point cela rend le code plus clair? Au lieu de i et j et array1 et array2 (ou list1 et list2), chaque nom décrit les données réelles sur lesquelles vous travaillez avec.

1
Michael Geary 13 juil. 2015 à 04:54

Changer la boucle:

list1 = ["happy", "sad", "good", "bad", "like"]
list2 = ["i like starhub", "i am happy with the starhub service", "starhub is bad", " this is not awful"]

for j in list2:
    for i in list1:
        if i in j:
            print(i)


>>like
>>happy
>>bad

Celui en haut est ce qui est utilisé comme liste principale. Donc, dans votre cas, list1 était le principal et était trié comme tel.

Dans celui que j'ai donné, list2 est le principal à la place.

3
Leb 13 juil. 2015 à 04:27