2012-04-29 43 views
3

我將如何做到在Python以下幾點:Python的排列

first = ['John', 'David', 'Sarah'] 
last = ['Smith', 'Jones'] 

combined = ['John Smith', 'John Jones', 'David Smith', 'David Jones', 'Sarah Smith', 'Sarah Jones'] 

是否有所有排列組合的方法?

+0

您可以使用任何*語言自行編寫排列生成器。 – 2012-04-29 03:00:27

回答

11

itertools.product

import itertools 
combined = [f + ' ' + l for f, l in itertools.product(first, last)] 
7

不知道是否有一個更優雅的解決方案,但是這應該工作:

[x + " " + y for x in first for y in last]

+0

+1列表解析 – 2012-04-29 04:28:51

0

我不知道這方面的任何Python的工具方法,然而以下將達到相同:

def permutations(first, second): 
    result = [] 
    for i in range(len(first)): 
    for j in range(len(second)): 
     result.append(first[i] + ' ' + second[j]) 
    return result 
+1

您的Python知識已經過時了一點,您需要進行一次複習。閱讀並從其他文章學習,尤其是。來自Joel Cornett的人。 itertools.product處理for-loop嵌套,列表解析優於顯式附加。 – PaulMcG 2012-04-29 06:18:10

+0

感謝您的建議。在閱讀其他答案後,我意識到了這一點,現在我已經嘗試了itertools和列表解析。 – 18bytes 2012-05-02 04:44:11

4

productitertools將做的伎倆。

product(first, last) 

會給返回發電機的firstlast所有可能的組合。在那之後,你所需要做的就是連接第一個和最後一個名字。您可以在一個表達式做到這一點:

combined = [" ".join(pair) for pair in product(first, last)] 

它也可以用字符串連接要做到這一點:

combined = [pair[0] + " " + pair[1] for pair in product(first, last)] 

這種方法比較慢,雖然,作爲連接在翻譯完成的。總是建議使用"".join()方法,因爲此代碼在C中執行。