【发布时间】:2020-02-07 05:02:41
【问题描述】:
我正在尝试编写一个函数来返回两个列表之间的公共元素的数量。如果元素在L1 中出现j 次,在L2 中出现k 次,则共享j 和k 元素中的最小值。
例子:
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
我的想法是对L1和L2进行升序排序,然后比较每个元素:
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)
但是,当我测试 intersection([1, 6, 1, 4], [1, 2, 3, 4]) 时,该函数给了我 1 而不是 2。有人可以告诉我哪一部分错了吗?
我创建了dL1 和dL2,因为我希望L1 和L2 保持不变以用于其他目的,并且由于我是初学者,我只能使用基本递归和抽象列表执行此操作的函数。
【问题讨论】:
-
为什么是初学者就意味着不能使用Python标准库?这是不合逻辑的。
标签: python list recursion set-intersection