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

productfromitertools会做的伎俩。

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 中执行的。

于 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 回答