Today
-
Yesterday
-
Total
-
  • Python append item without duplicates
    Programming Language/Python3 2021. 10. 25. 17:57

    시작 계기

    워커 내부에서 parsel, bs4, selenium을 함께 사용했는데
    우선 순위에 따라 파싱되도록 구현하려고 했다.

     

    결과

    여러가지를 시도해보았지만, list comprehension이 제일 좋았다.

    list and set ?

    current_elem_type = ['selenium']
    temp_set = set()
    
    elem_type_list = [x
                     for x in ['parsel', 'bs4', 'selenium']
                     if not (x in current_elem_type or temp_set.add(x))
                     ]
    
    print(elem_type_list)
    # ['parsel', 'bs4']

    bs4가 제외된 결과가 출력된다.

    나중에 생각해보니.. or temp_set.add(x) 지우고, current_elem_type.extend(elem_type_list)하면 된다.

    set union

    current = 'selenium'
    
    elem_type_list = [current]
    elem_list = ['parsel', 'bs4', 'selenium']
    
    result = list(set(elem_type_list) | set(elem_list))
    print(result)
    # ['bs4', 'parsel', 'selenium']

    리스트에 작성된 순서가 포함되지 않고, 알파벳 순서로 출력되었다.

    list extend + enclose with set
    current = 'selenium'
    elem_list = ['parsel', 'bs4', 'selenium']
    
    elem_type_list = [current]
    elem_type_list.extend(elem_list)
    
    print(elem_type_list)
    print(set(elem_type_list))
    # ['selenium', 'parsel', 'bs4', 'selenium']
    # {'bs4', 'selenium', 'parsel'}

    똑같은 결과다.

    set update

    current = 'selenium'
    elem_list = ['parsel', 'bs4', 'selenium']
    elem_type_list = {current}
    
    result = {_type for _type in elem_list}
    elem_type_list.update(result)
    print(result)
    # {'selenium', 'bs4', 'parsel'}

    의도한대로 출력된다.

    list comprehension + extend

    current = 'selenium'
    elem_type_list = [current]
    elem_list = ['parsel', 'bs4', 'selenium']
    
    suffix = [_type for _type in elem_list if _type != current]
    elem_type_list.extend(suffix)
    print(elem_type_list)
    # ['selenium', 'parsel', 'bs4']

    같이 의도대로 동작한다.
    리스트로 작성된 코드가 가장 알아보기 쉽다고 생각한다.

    'Programming Language > Python3' 카테고리의 다른 글

    Should `import` statements always at the top?  (0) 2021.10.25
    전역 상수는 나쁜 것일까?  (0) 2021.10.25
    Python Define Constants  (0) 2021.10.25
    Python datetime  (0) 2021.10.25
    Python 2d list to 1d  (0) 2021.10.25

    댓글

Designed by Tistory.