回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图编写一个函数,返回两个列表之间的公共元素数。如果元素在<code>L1</code>中出现<code>j</code>次,在<code>L2</code>中出现<code>k</code>次,则共享<code>j</code>和<code>k</code>个元素的最小值</p>
<p>示例:</p>
<pre><code>L1 = [1, 2, 3, 4, 5]
L2 = [4, 2]
L3 = [1, 2, 3, 4, 4, 5, 5]
intersection_size ( L1 , L2 ) => 2
intersection_size ( L1 , L3 ) => 5
</code></pre>
<p>我的想法是按升序对<code>L1</code>和<code>L2</code>进行排序,然后比较每个元素:</p>
<pre><code>def intersection(L1, L2):
dL1 = L1[:]
dL2 = L2[:]
dL1.sort()
dL2.sort()
if dL1[1:] == [] or dL2[1:] == []:
return 0
if dL1[0] == dL2[0]:
return 1 + intersection(dL1[1:], dL2[1:])
elif dL1[0] > dL2[0]:
return 0 + intersection(dL1, dL2[1:])
elif dL1[0] < dL2[0]:
return 0 + intersection(dL1[1:], dL2)
</code></pre>
<p>但是,当我测试<code>intersection([1, 6, 1, 4], [1, 2, 3, 4])</code>时,函数给我的是1而不是2。有人能告诉我哪部分错了吗</p>
<p>我创建了<code>dL1</code>和<code>dL2</code>,因为我希望<code>L1</code>和<code>L2</code>在其他方面保持不变,而且因为我是初学者,我只允许使用基本的递归和抽象列表函数来实现这一点</p>