101 votes

Produit vectoriel par paires en Python

Comment puis-je obtenir la liste des produits croisés paires à partir d'une liste de listes arbitrairement longues en Python ?

Exemple

a = [1, 2, 3]
b = [4, 5, 6]

crossproduct(a,b) devrait donner [[1, 4], [1, 5], [1, 6], ...] .

143voto

ChristopheD Points 38217

Vous êtes à la recherche de itertools.product si vous utilisez (au moins) Python 2.6.

>>> import itertools
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> itertools.product(a,b)
<itertools.product object at 0x10049b870>
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

80voto

Cory Petosky Points 6520

Puisque vous avez demandé une liste :

[(x, y) for x in a for y in b]

Mais vous pouvez éviter la surcharge d'une liste si vous ne faites qu'une boucle en utilisant des générateurs à la place :

((x, y) for x in a for y in b)

Se comporte de manière identique dans un for mais ne donne pas lieu à la création d'un fichier list .

14voto

user698585 Points 3019

En utilisant les générateurs, il n'est pas nécessaire d'utiliser itertools, tout simplement :

gen = ((x, y) for x in a for y in b)

for u, v in gen:
    print u, v

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X