2015-03-28 1 views
4
from itertools import product 
teams = ['india', 'australia', 'new zealand'] 
word_and = ['and'] 
tmp = '%s %s %s' 
items = [teams, word_and, teams] 
print(list(tmp % a for a in list(product(*items)))) 

гравюр:Itertools продукт без повторяющихся дублей

['india and india', 
'india and australia', 
'india and new zealand', 
'australia and india', 
'australia and australia', 
'australia and new zealand', 
'new zealand and india', 
'new zealand and australia', 
'new zealand and new zealand'] 

Как:

  1. избежать такое же имя, повторив в одном предложении (Индия и Индия)
  2. генерировать только один комбинации (либо в Индии, либо в Австралии, Австралии и Индии)

http://pythonfiddle.com/product-without-matching-duplicates

ответ

12

Вы должны использовать itertools.combinations как этот

>>> from itertools import combinations 
>>> teams = ['india', 'australia', 'new zealand'] 
>>> [" and ".join(items) for items in combinations(teams, r=2)] 
['india and australia', 'india and new zealand', 'australia and new zealand'] 

Но для этого простого случая, вы можете запустить две петли, как этот

>>> ["%s and %s" % (t1, t2) for i, t1 in enumerate(teams) for t2 in teams[i + 1:]] 
['india and australia', 'india and new zealand', 'australia and new zealand'] 
+0

спасибо за ответ, позвольте мне попробовать это .. – emaillenin

+0

который будет быстрее? комбинация или перечисление? – emaillenin

+0

@emaillenin Итак, я провел простой [тест времени] (http://ideone.com/oV7kTb), и он подтверждает, что 'комбинация' выполняется быстрее, с вашим образцом данных. – thefourtheye

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

  • Нет связанных вопросов^_^