dire que j'ai une liste: et une deuxième liste: p> Quel est le meilleur moyen de trier la liste que tout ce qui correspond à un élément de la liste B apparaîtra au début afin que le résultat soit: p>
5 Réponses :
>>> sorted([True,False,False]) [False, False, True]
Mise à jour de la question: A code> peut être dans n'importe quel ordre, de sorte que cela ne fonctionne actuellement pas
@Jamylak: Mais l'OP a également déclaré que l'ordre de production exact n'a pas d'importance, et l'exemple de l'OP a donné - [3,6,9,1,2,4,5,7,8,0] code> - conserve la commande d'origine au lieu d'être triée. Je pense donc que cette solution fonctionne (bien que si les tailles étaient plus importantes, cela pourrait être logique de transformer B dans un ensemble).
Nice, mais préférez e non in b code> à l'équivalent pas e in b code>
@wim tu as raison, c'est beaucoup plus pythonique! Parfois, j'oublie de telles soirées.
>>> A = [1,2,3,4,5,6,7,8,9,0] >>> B = [3,6,9] >>> [i for i in B if i in A] + [i for i in A if i not in B] [3, 6, 9, 1, 2, 4, 5, 7, 8, 0]
Si les deux sont déjà triés (ou commandés autrement que vous le souhaitez), vous pouvez utiliser: P> sinon, appliquez simplement trié code> à A code>, B code> ou ... p> p>
Et si un élément de B code> n'est pas dans a code> je ne pense pas que nous devrions l'ajouter à la liste
Beaucoup de ces réponses utilisent explicitement la logique définie. Mais Python l'a intégré. Si, comme vous le dites, l'ordre n'a pas d'importance tant que les pièces B CODE> sont en premier, cela s'occupera du reste: B = set(B)
list(B.intersection(A)) + list(set(A) - B)
+1 Mais je ferais >>> A, B = SET (A), SET (B), SET (B) CODE> >>> Liste (A & B) + liste (A - B) Code> Cela devrait également être plus rapide parce que B code> n'a pas besoin d'être converti implicitement en un définir code> deux fois comme il le fait dans ce cas. Aussi A code> est converti en un ensemble "/ code> deux fois
@jamylak, il souhaitera peut-être réaffecter tout le tout à A [:] code>, alors j'ai pris votre conseil, mais a sauté le paramètre permanent définir code> ting of A code> >.
>>> A = [1,2,3,4,5,6,7,8,9,0] >>> B = [3,6,9] >>> b = set(B) >>> sorted(A, key=b.__contains__, reverse=True) [3, 6, 9, 1, 2, 4, 5, 7, 8, 0]
Est-il nécessairement trié?
Non, A et B peuvent être dans n'importe quel ordre de commencer. Ils n'ont pas nécessairement besoin d'être triés à la fin tant que ceux de B venir devant ceux de A.
@AShery Que voulez-vous dire qu'ils ne nécessairement i> doivent être triés, voulez-vous qu'ils soient triés à la fin?
Peu importe si elles sont dans l'ordre d'origine ou triées tant que celles qui apparaissent dans B sont d'abord, encore une fois dans aucun ordre spécifique.