2012-04-29 21 views
3
私はPythonで、次の達成だろうか

:すべての順列を結合する方法はPythonの順列

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

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

ありますか?ただし、次の

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

+0

任意の*言語で自分で順列生成プログラムを作成できます。 –

答えて

11

itertools.product

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

わかりません

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 
+0

+1リストの理解のため –

0

私は、このための任意のPythonのユーティリティメソッドを認識していないです。そこに、よりエレガントな解決策であるが、これは動作する必要がある場合

+1

あなたのPythonの知識は少し古いですが、あなたはリフレッシャーが必要です。他の投稿、特にespを読んで学んでください。 Joel Cornettのもの。 itertools.productはfor-loopネストを処理し、コードのように明示的に追加するよりもリスト内包が優れています。 – PaulMcG

+0

提案していただきありがとうございます。私は他の答えを読んだ後も同じことを理解しました。私は今itertoolsとリスト内包を理解しました。 – 18bytes

4

productからitertoolsまではこのトリックを行います。

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()メソッドを使用することをお勧めします。