Create a complement of list preserving duplicate values

前端 未结 5 1463
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-11 01:32

Given list a = [1, 2, 2, 3] and its sublist b = [1, 2] find a list complementing b in such a way that sorted(a) == sorted(b + complement)

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-11 01:56

    Main idea: if the values are not unique, make them unique

    def add_duplicate_position(items):
        element_counter = {}
        for item in items:
            element_counter[item] = element_counter.setdefault(item,-1) + 1
            yield element_counter[item], item
        
    assert list(add_duplicate_position([1, 2, 2, 3])) == [(0, 1), (0, 2), (1, 2), (0, 3)]
    
    def create_complementary_list_with_duplicates(a,b):
        a = list(add_duplicate_position(a))
        b = set(add_duplicate_position(b))
        return [item for _,item in [x for x in a if x not in b]]
      
    a = [1, 2, 2, 3]
    b = [1, 2]
    assert create_complementary_list_with_duplicates(a,b) == [2, 3]
    

提交回复
热议问题