Hello,

A force de faire quelques challenge sur HackerRank, j’ai noté quelques tricks que j’oublie souvent. Du coup, je met ça içi. Servez-vous :-)

list et set

intersection de deux listes

Récupérer l’intersection entre deux listes (en fait, uniquement si l’une des deux peut être transformée en set):

a = ['un', 'deux', 'trois']
b = ['dites', 'trente', 'trois']
inter = list(filter(set(a).__contains__, b))

Résultat :

print(inter)
['trois']

module itertools

toutes les combinaisons d’une liste de listes

Imaginons que j’ai une méga liste qui contient des listes:

mega_liste = [['a', 'b'], ['c', 'd', 'e'], ['f']]

Tout le job de génération des combinaison se fait par la fonction product de itertools. La doc (en français !) se trouve ici : doc itertools. Les explications restent un peu pas forcément hyper claires mais j’espère que ce petit exemple vous permettra d’en comprendre l’utilité.

import itertools
combinaisons = itertools.product(*mega_liste)

On utilise ici l’opérateur splat (l’étoile) pour faire de l’unpacking sur ‘mega_liste’. Un (excellent) article sur ça : SametMax - operateur splat ou étoile en Python.
On obtient alors :

for combinaison in combinaisons:
    print(combinaison)

('a', 'c', 'f')
('a', 'd', 'f')
('a', 'e', 'f')
('b', 'c', 'f')
('b', 'd', 'f')
('b', 'e', 'f')