2014-07-08 54 views
1
template = "{{ person }} is a {{ quality }} {{ occupation }}" 
replacements = { 
"person":["John","Matt","Steve"], 
"quality":["great","dedicated"], 
"occupation":["engineer","student","athelete"] 
} 

Output: 
John is a great engineer 
Matt is a great engineer 
Steve is a great engineer 
John is a dedicated engineer 
Matt is a dedicated engineer 
Steve is a dedicated engineer 
John is a great student 
Matt is a great student 
Steve is a great student 
............................. 

它們可以通過使用可替換元素列表列表生成,並在它們之間循環以生成置換,然後加入列表元素。Python模塊生成字符串中可能的字符串替換的所有排列?

list_input =  [["John","Matt","Steve"],["is"],["a"],["great","dedicated"],["engineer","student","athelete"]] 

example_permutation = ["John","is","a","great","engineer"] 

是否有一個Python模塊/方法,其可以產生類似的置換?

+2

你連這個標記用'itertools',這是你想要的模塊。 :/ – geoffspear

+0

@Wooble,我不確定itertools是否會有支持方法,我只知道itertools來產生排列,但它並沒有讓我想到在這種情況下它是一個笛卡爾積。 – DhruvPathak

回答

4

這只是名單

import itertools 

list_input =  [["John","Matt","Steve"],["is"],["a"],["great","dedicated"],["engineer","student","athelete"]] 
for element in itertools.product(*list_input): 
    print element 

,或者你可以直接從你的字典@dano做的cartesian product(建議)

replacements = { 
"person":["John","Matt","Steve"], 
"quality":["great","dedicated"], 
"occupation":["engineer","student","athelete"] 
} 

for element in itertools.product(*replacements.values()): 
    print("{} is a {} {}".format(*element)) 


#output 

John is a great engineer 
John is a great student 
John is a great athelete 
John is a dedicated engineer 
John is a dedicated student 
John is a dedicated athelete 
Matt is a great engineer 
Matt is a great student 
Matt is a great athelete 
Matt is a dedicated engineer 
Matt is a dedicated student 
Matt is a dedicated athelete 
Steve is a great engineer 
Steve is a great student 
Steve is a great athelete 
Steve is a dedicated engineer 
Steve is a dedicated student 
Steve is a dedicated athelete 
+1

爲什麼不在itertools.product(* replacements.values()):中使用'for元素,所以OP可以直接將它應用到他的數據結構中? – dano

+0

@dano是的,我會添加它 –

+0

然後'print'語句將是'print(「{}是一個{} {}」。格式(*元素))'得到他想要的輸出。 – dano

相關問題