2010-03-05 5 views
5

J'ai quatre listes différentes. headers, descriptions, short_descriptions et misc. Je veux combiner en toutes les façons possibles d'imprimer:Le moyen le plus efficace pour créer toutes les combinaisons possibles de quatre listes en Python?

header\n 
description\n 
short_description\n 
misc 

comme si je devais (je saute short_description et divers dans cet exemple pour des raisons évidentes)

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

Je veux à imprimer comme:

Hello there 
I like pie 
... 

Hello there 
Ho ho ho 
... 

Hi there! 
I like pie 
... 

Hi there! 
Ho ho ho 
... 

Que diriez-vous être le meilleur/le plus propre/le plus efficace pour ce faire? Est-ce que for est la seule façon d'y aller?

Répondre

0

allez voir les itertools le module, il contient des fonctions pour obtenir des combinaisons et permutations de tout 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

Une expression de générateur pour le faire:

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

Un bon! Bien que ce ne soit pas aussi facile à lire que la solution utilisant 'itertools.product' je ne peux pas être en désaccord avec celui qui ne nécessite aucune importation. – 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 
>>> 
Questions connexes