Itertools产品没有重复重复

Len*_*ran 9 python python-itertools python-3.x

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))))
Run Code Online (Sandbox Code Playgroud)

打印:

['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']
Run Code Online (Sandbox Code Playgroud)

如何:

  1. 避免在一个句子中重复相同的名称(印度和印度)
  2. 只产生一种组合(印度和澳大利亚或澳大利亚和印度)

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

the*_*eye 16

你应该使用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']
Run Code Online (Sandbox Code Playgroud)

但是对于这个简单的情况,你可以运行两个循环,就像这样

>>> ["%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']
Run Code Online (Sandbox Code Playgroud)

  • @emaillenin`组合'更快但不是很多:http://repl.it/fu7但是,没有理由不使用组合. (2认同)