collection간 비교가 필요할 때 자주 사용하는 패턴이 보여서 정리하려고 한다

1. list vs list

  i) 공통된 원소 비교 set(a) & set(b)
  ii) 완전히 동일한 리스트인지 a == b
  iii) 원소 같고 중복도 같은지 (순서 X) Counter(a) == Counter(b)
  iv) 순서/중복 무시하고 포함 여부 확인 set(a).issubset(set(b))
  v) 교집합 외 개수 비교 len(set(a) & set(b))

2. set vs set (보통은 그룹별 키가 얼마나 겹치나 볼 때 썼음)

  i) 공통된 원소 a & b, a.intersection(b) 교집합
  ii) 두 set의 모든 원소 (중복 제거) a | b, a.union(b) 합집합
  iii) a에만 있는 원소 a - b, a.difference(b) 차집합
  iv) 서로 다른 원소만 a ^ b, a.symmetric_difference(b) 대칭 차집합
  v) a가 b의 (진)부분집합인지 a <= b, a.issubset(b) 부분집합 관계 확인
  vi) a가 b의 진부분집합인지 a < b 진부분집합
  vii) 겹치는 원소가 있는지 not a.isdisjoint(b) 공통 원소 존재 여부 판단

3. df vs df

| 완전 동일 여부     | `df1.equals(df2)`               | 정렬까지 같아야 함 |
| 값 위치별 비교     | `df1 == df2`                    | 마스크 형태 결과. matrix 비교라 같은 행,렬 위치에 있는 값들끼리 == 비교한 것  |
| 행 단위 차이 추출   | `merge(..., indicator=True)`    | 유용|
| key 기준 변경 추적 | `merge` + suffix + 비교           | 특정 컬럼 비교   |
| 열 값 변경 추적    | `df1.compare(df2)`              | 깔끔한 차이만 추출 |
| 전체 row 존재 여부 | `set(map(tuple, df.values))` 방식 | 빠른 비교용     |

+ Recent posts