반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- java테스트
- junit
- Java
- vscode
- 테스트자동화
- 자바
- html
- math
- list
- SpringBoot
- HashMap
- 배열
- 단위테스트
- junit5
- 자바문법
- 인텔리제이
- 정규식
- 스프링부트
- Eclipse
- 자바스크립트
- javascript
- js
- IntelliJ
- CSS
- 문자열
- string
- ArrayList
- Array
- input
- Visual Studio Code
Archives
- Today
- Total
어제 오늘 내일
[Python 기초] "겹치는 데이터만 골라내자!" 리스트 교집합 찾기 3가지 비법 본문
예를 들어 '어제 방문한 고객 명단'과 '오늘 방문한 고객 명단'이 있을 때, "이틀 연속 방문한 단골손님"을 찾으려면 두 리스트의 교집합을 구해야 합니다. 파이썬에서는 어떻게 할까요?
1. 가장 정석적인 방법: 집합()과 연산자
파이썬의 집합(set) 자료형은 수학의 집합 연산을 완벽하게 지원합니다. 리스트를 집합으로 바꾼 뒤 & (앰퍼샌드) 기호 하나만 쓰면 끝납니다.
📌 예제 코드: & 연산자 활용
list_a = ["사과", "바나나", "포도", "딸기"]
list_b = ["포도", "딸기", "수박", "참외"]
# 1. 리스트를 집합으로 변환
set_a = set(list_a)
set_b = set(list_b)
# 2. '&' 기호로 교집합 구하기
common = set_a & set_b
# 3. 다시 리스트로 변환 (필요한 경우)
result = list(common)
print("공통 요소:", result)
# 출력: ['포도', '딸기'] (순서는 바뀔 수 있습니다)
2. 가독성이 좋은 방법: 함수
기호(&) 대신 이름을 직접 부르는 함수를 사용하는 방법입니다. 코드가 더 명시적이어서 다른 사람이 읽을 때 "아, 교집합을 구하고 있구나!"라고 바로 이해하기 좋습니다.
📌 예제 코드: intersection 함수 활용
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
# 한 줄로 요약해서 쓰기
common = list(set(list1).intersection(list2))
print("겹치는 숫자:", common)
# 출력: [4, 5]
3. 순서를 유지해야 할 때: 리스트 컴프리헨션
집합(set)을 쓰면 중복 제거와 속도 면에서 유리하지만, 데이터의 순서가 뒤죽박죽 섞인다는 단점이 있습니다. 만약 "list_a에 들어있는 순서대로" 겹치는 값을 찾고 싶다면 리스트 컴프리헨션을 사용해야 합니다.
📌 예제 코드: 순서 유지 교집합
list_a = ["A", "B", "C", "D"]
list_b = ["C", "E", "A", "F"]
# list_a에서 하나씩 꺼내는데, 그게 list_b에도 들어있는 경우만 모으기
# (이때 list_b를 set으로 미리 바꿔두면 속도가 훨씬 빨라집니다!)
set_b = set(list_b)
common = [item for item in list_a if item in set_b]
print("순서 유지 교집합:", common)
# 출력: ['A', 'C'] (list_a에 나타난 순서대로 'A'가 'C'보다 먼저 나옵니다)
📝 한눈에 비교하는 요약
| 방법 | 특징 | 추천 상황 |
|---|---|---|
set_a & set_b |
가장 짧고 빠름 | 순서가 상관없을 때 (가장 권장) |
.intersection() |
의미가 명확함 | 가독성이 중요한 협업 프로젝트 |
| 리스트 컴프리헨션 | 순서 유지 가능 | 원본의 순서가 중요할 때 |
💡 보너스 팁: 3개 이상의 리스트라면?
세 개 이상의 리스트에서 공통 요소를 찾을 때도 set은 강력합니다.set(list1) & set(list2) & set(list3) 처럼 계속 이어 붙여주기만 하면 됩니다.
반응형
'IT > Python' 카테고리의 다른 글
| [Python 기초] "따로 노는 리스트를 하나로 묶자!" zip() 함수 활용법 (0) | 2026.05.24 |
|---|---|
| [Python 기초] "누가 빠졌지?" 리스트 차집합 찾기 및 데이터 대조 (0) | 2026.05.22 |
| [Python 기초] "흩어진 데이터를 하나로!" 파이썬 리스트 합치기 4가지 방법 (0) | 2026.05.21 |
| [Python 기초] "원하는 곳만 골라서 반전!" 리스트 부분 슬라이싱 및 뒤집기 (0) | 2026.05.19 |
| [Python 기초] "거꾸로 줄을 서시오!" 파이썬 리스트 뒤집기 3가지 방법 (0) | 2026.05.18 |
Comments
