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')