显示列表中的公共元素以及它们在python中出现的次数

时间:2017-04-08 00:50:35

标签: python python-2.7 list function

我需要制作一个公式,给定两个列表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]

感谢您的帮助!

4 个答案:

答案 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)

解决此问题的三个步骤:

  1. 找出这些元素应该在最终列表中,这是两个列表的intersection
  2. 对于步骤1中找到的每个元素,找出它应该在最终列表中的次数
  3. 根据前两个步骤找到的信息生成最终列表
  4. 然后将这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]