2010-03-05 18 views
5

Ho quattro elenchi diversi. headers, descriptions, short_descriptions e misc. Voglio combinare questi in tutti i modi possibili per stampare:Il modo più efficace per creare tutte le possibili combinazioni di quattro elenchi in Python?

header\n 
description\n 
short_description\n 
misc 

come se avessi (sto saltare short_description e misc in questo esempio per ovvie ragioni)

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

lo voglio per stampare come:

Hello there 
I like pie 
... 

Hello there 
Ho ho ho 
... 

Hi there! 
I like pie 
... 

Hi there! 
Ho ho ho 
... 

Quale diresti è il modo migliore/più pulito/più efficace per fare questo? for -necessario l'unico modo per andare?

risposta

0

Date un'occhiata alle itertools modulo, contiene funzioni per ottenere combinazioni e permutazioni da qualsiasi iterabili.

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

Un'espressione generatore per farlo:

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

Bello! Anche se questo non è facile da leggere come la soluzione che utilizza 'itertools.product' non posso non essere d'accordo con uno che non richiede alcuna importazione. – 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 
>>> 
Problemi correlati