我需要制作一个公式,给定两个列表a和b,它返回a和b中的公共元素。如果相同的元素在两者中出现不止一次,让我们说a中的xa次和b中的xb次,那么x应该在结果中出现min(xa,xb)次。如果可能,请不要使用" import"在代码中,请。
例如: (假设我的函数叫做common(a,b))
common([1,3,3,3],[1,3,3,3,3,4])
=> [1,3,3,3]
感谢您的帮助!
答案 0 :(得分:0)
一种简单的方法是先对两个列表进行排序,然后逐个比较第一个元素。代码是这样的:
def common(a, b):
sorted_a, sorted_b = sorted(a), sorted(b)
numa, numb = len(a), len(b)
rv = []
i, j = 0, 0
while i < numa and j < numb:
if sorted_a[i] == sorted_b[j]:
rv.append(sorted_a[i])
i += 1
j += 1
elif sorted_a[i] < sorted_b[j]:
i += 1
else:
j += 1
return rv
答案 1 :(得分:0)
解决此问题的三个步骤:
intersection
然后将这3个步骤翻译成三行代码:
def common(l1, l2):
intersection = [e for e in l1 if e in l2]
elemnts_counters = {e: min(l1.count(e), l2.count(e)) for e in intersection}
return sum([[e] * c for e, c in elemnts_counters.items()], [])
然后
print common([1,3,3,3], [1,3,3,3,3,4])
会给你:
[1,3,3,3]
答案 2 :(得分:0)
# access column by name
df['vehicle_id_reservation_count`]
当调用common([1,3,3,3],[1,3,3,3,3,4])函数时,输出会给你:
[1,3,3,3]
答案 3 :(得分:0)
def common(l1,l2):
totalElements = l1 + l2
resultList = []
for num in totalElements:
if num in l1 and num in l2:
resultList.append(num)
l1.remove(num)
l2.remove(num)
return resultList
l1 = [1,3,3,3,5]
l2 = [1,3,3,3,5,3,4]
result = common(l1 , l2)
print(result)
[1,3,3,3,5]