2012-04-29 3 views
3

Как бы выполнить следующее питона:Python перестановка

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

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

Есть ли способ объединить все перестановки?

+0

Вы можете запрограммировать генератор перестановок на любом языке *. –

ответ

7

Не уверен, что если есть более элегантное решение, но это должно работать:

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

+0

+1 для ознакомления с списком –

0

Я не знаю ни одного метода питон утилиты для этого, однако следующие будет достигнуть того же:

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 немного устарело, вам нужно обновить. Читайте и учитесь на других постах, особенно. один из Джоэла Корнетта. Продукт itertools.product обрабатывает вложенность for-loop, а списки - лучше, чем явное добавление, как ваш код. – PaulMcG

+0

Спасибо за предложение. Я понял то же самое после прочтения других ответов, я уже начал изучать itertools и перечислить их. – 18bytes

4

product от itertools сделает трюк.

product(first, last) 

даст вернуть генератор со всеми возможными комбинациями first и last. После этого все, что вам нужно сделать, это совместить имя и фамилию. Вы можете сделать это в одном выражении:

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

Это также можно сделать с помощью конкатенации:

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

Этот метод работает медленнее, хотя, как конкатенация сделано в интерпретаторе. Этот код всегда рекомендуется использовать, поскольку этот код выполняется в C.

Смежные вопросы