<p>您需要计算大小2的组合。一个好方法是使用<a href="https://docs.python.org/2/library/itertools.html" rel="nofollow noreferrer">itertools</a>:</p>
<pre><code>import itertools
countries = ['france', 'brazil', 'usa', 'uk', 'canada', 'mexico', 'angola']
list(itertools.combinations(countries, 2))
</code></pre>
<p>作为输出:</p>
<pre><code>[('france', 'brazil'),
('france', 'usa'),
('france', 'uk'),
('france', 'canada'),
('france', 'mexico'),
('france', 'angola'),
('brazil', 'usa'),
('brazil', 'uk'),
('brazil', 'canada'),
('brazil', 'mexico'),
('brazil', 'angola'),
('usa', 'uk'),
('usa', 'canada'),
('usa', 'mexico'),
('usa', 'angola'),
('uk', 'canada'),
('uk', 'mexico'),
('uk', 'angola'),
('canada', 'mexico'),
('canada', 'angola'),
('mexico', 'angola')]
</code></pre>
<p>我认为这是一个更快的方法,我比较了我的机器的性能:</p>
<pre><code>%%timeit
list(itertools.combinations(countries, 2))
</code></pre>
<p>大约需要1.28µs码</p>
<pre><code>%%timeit
[(c1, c2) for c1 in countries for c2 in countries if c1 != c2]
</code></pre>
<p>大约需要4.81µs码</p>
<pre><code>%%timeit
countries_bigrams = [(x, y) for x, y in product(countries, repeat=2) if x != y]
</code></pre>
<p>大约5.81µs码</p>