2010-03-05 18 views
5

Tengo cuatro listas diferentes. headers, descriptions, short_descriptions y misc. Quiero combinar estos en todas las formas posibles para imprimir:¿La forma más eficiente de crear todas las combinaciones posibles de cuatro listas en Python?

header\n 
description\n 
short_description\n 
misc 

como si tuviera (me estoy saltando short_description y misceláneos en este ejemplo por razones obvias)

headers = ['Hello there', 'Hi there!'] 
description = ['I like pie', 'Ho ho ho'] 
... 

lo quiero para imprimir como:

Hello there 
I like pie 
... 

Hello there 
Ho ho ho 
... 

Hi there! 
I like pie 
... 

Hi there! 
Ho ho ho 
... 

¿Cuál diría usted que es la forma mejor/más limpia/más eficiente de hacer esto? ¿Es for, la única manera de ir?

Respuesta

0

Tenga una mirada a los itertools módulo, que contiene funciones para obtener combinaciones y permutaciones de cualquier iterables.

4
import itertools 

headers = ['Hello there', 'Hi there!'] 
description = ['I like pie', 'Ho ho ho'] 

for p in itertools.product(headers,description): 
    print('\n'.join(p)+'\n') 
3

Una expresión generadora de hacerlo:

for h, d in ((h,d) for h in headers for d in description): 
    print h 
    print d 
+0

¡Bonito! Aunque no es tan fácil de leer como la solución que usa 'itertools.product', no puedo estar en desacuerdo con una que no requiera ninguna importación. – jathanism

0
>>> h = 'h1 h2 h3'.split() 
>>> h 
['h1', 'h2', 'h3'] 
>>> d = 'd1 d2'.split() 
>>> s = 's1 s2 s3'.split() 
>>> lists = [h, d, s] 
>>> from itertools import product 
>>> for hds in product(*lists): 
    print(', '.join(hds)) 

h1, d1, s1 
h1, d1, s2 
h1, d1, s3 
h1, d2, s1 
h1, d2, s2 
h1, d2, s3 
h2, d1, s1 
h2, d1, s2 
h2, d1, s3 
h2, d2, s1 
h2, d2, s2 
h2, d2, s3 
h3, d1, s1 
h3, d1, s2 
h3, d1, s3 
h3, d2, s1 
h3, d2, s2 
h3, d2, s3 
>>> 
Cuestiones relacionadas