3

Pythonで次のことをどのように達成しますか:

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

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

すべての順列を組み合わせる方法はありますか?

4

4 に答える 4

11

itertools.product

import itertools
combined = [f + ' ' + l for f, l in itertools.product(first, last)]
于 2012-04-29T02:54:57.303 に答える
7

もっとエレガントな解決策があるかどうかはわかりませんが、これはうまくいくはずです:

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

于 2012-04-29T02:56:28.707 に答える
4

productからitertoolsトリックを行います。

product(first, last)

は、 と のすべての可能な組み合わせを含むジェネレータを返しfirstますlast。その後、姓と名を連結するだけです。これを 1 つの式で行うことができます。

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

文字列連結でこれを行うことも可能です:

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

ただし、インタープリターで連結が行われるため、この方法は遅くなります。"".join()このコードは C で実行されるため、常にこのメソッドを使用することをお勧めします。

于 2012-04-29T03:42:53.160 に答える
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 
于 2012-04-29T02:59:33.003 に答える