擅长:python、mysql、java
<p>如果两个列表中没有重复项,则可以使用集合,集合在内部使用哈希-</p>
<pre><code>>>> L1 = {'milk', 'butter', 'bread', 'shampoo', 'dog food'}
>>> L2 = {'milk', 'butter', 'shampoo', 'dog food', 'coffee'}
>>> L1 & L2
{'dog food', 'butter', 'shampoo', 'milk'}
</code></pre>
<p>如果需要处理重复项,Python有一个<a href="https://docs.python.org/3.3/library/collections.html#collections.Counter" rel="nofollow">^{<cd1>}</a>形式的multiset,它的交集操作执行您期望的操作:</p>
<pre><code>>>> from collections import Counter
>>> Counter(L1) & Counter(L2)
Counter({'butter': 1, 'milk': 1, 'shampoo': 1, 'dog food': 1})
</code></pre>
<p>若要获取“x%in common”字符串,需要将交叉点中的元素总数与开始时的元素数进行比较。集合以列表的方式支持<code>len()</code>,因此如果没有重复项,则获取公共项的数量只是<code>len(L1 & L2)</code>。计算一个计数器的长度只会得到<em>distinct</em>元素的数量-当L1和L2是计数器时,要计算出元素的多重数,可以执行以下操作:</p>
<pre><code> common = L1 & L2
num_in_common = sum(common.values())
</code></pre>