2010-03-05 46 views
5

我有四個不同的列表。 headers,descriptions,short_descriptionsmisc。我想這些組合成所有可能的方式打印出:最有效的方法是在Python中創建四個列表的所有可能的組合?

header\n 
description\n 
short_description\n 
misc 

像如果我有(我跳過SHORT_DESCRIPTION和雜項在這個例子中顯而易見的原因)

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

我想它打印如:

Hello there 
I like pie 
... 

Hello there 
Ho ho ho 
... 

Hi there! 
I like pie 
... 

Hi there! 
Ho ho ho 
... 

你會說什麼是最好/最乾淨/最有效的方式來做到這一點?是for - 唯一的路要走?

回答

0

看一看到itertools模塊,它包含的功能從任何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

生成表達式做到這一點:

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

不錯的一個!雖然這不像使用itertools.product的解決方案那麼容易理解,但我不能不同意不需要任何導入的解決方案。 – jathanism 2010-03-05 22:28:31

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 
>>> 
相關問題