一尘不染

Itertools产品,无需重复

python

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))))

印刷品:

['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


阅读 161

收藏
2021-01-20

共1个答案

一尘不染

你应该使用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']
2021-01-20