Command Palette

Search for a command to run...

두 목록 비교: 공통 항목, 고유 항목 및 중복 항목 찾기

두 목록 비교: 공통 항목, 고유 항목 및 중복 항목 찾기

T
Toolz Team
|Jul 21, 2026|18 최소 읽기

차이 및 비교 모음의 일부

지원 엔지니어는 한 번 저에게 왜 40 명의 고객이 갱신 이메일을 두번 받았는지 물었습니다. 대답은 찾는데 한 시간이 걸렸고 완전히 평범했습니다: 캠페인 목록은 한 수출품을 다른 수출품 아래에 붙여서 조립되었고,40 개의 주소가 둘 다에 존재하지 않았습니다. 왜냐하면 검사는 2 천 행을 눈알로 보거나 a 를 쓰는 것을 의미했기 때문입니다 VLOOKUP 팀의 절반은 신뢰했습니다.'t 신뢰. 그래서 아무도 확인하지 않았고, 같은 40명의 사람들은 자신의 카드가 곧 청구될 것이라는 말을 두 번이나 들었습니다.

그것이 이 문제의 모양입니다. 두 목록을 조정하는 것은 누구나 데이터로 하는 가장 일반적인 작업 중 하나이며,it's 지루한 사람들이 건너뛰거나 나쁘게 할 만큼 지루합니다. 본능은 일반적으로 diff 도구에 도달하고 두 목록을 모두 붙여넣고 컬러 출력을 곁눈질하는 것입니다. diff 가 did't 가 묻는 질문에 답하기 때문에 즉시 실패합니다. 또는 스프레드시트로 이동하여 조립을 시작합니다 MATCH/COUNTIF 작동하지만 10분이 걸리고 유물 you'll을 생성하는 수식은 절대 재사용하지 않습니다.

당신이 실제로 원하는 연산은 이름이 있고 it's 어떤 도구보다도 오래된: 산술을 설정합니다. 교차점,차이, 합집합. 나는 [Toolz.dev](/를 구축하고 브라우저 기반 넣어 목록 비교 도구 하지만 이 가이드는 아래의 개념, 즉 순서를 무시해야 하는 이유, 조용히 접는 경우가 무엇인지, 이것과 차이점 중에서 선택하는 방법에 대한 것입니다.

TL;DR: 두 목록을 비교하려면 각각을 순서 없는 집합으로 처리하고 교차점 (둘 다 항목), 두 차이점 (A 에만 항목,B 에만 항목) 및 각 목록 내의 중복 항목을 계산합니다. 순서를 완전히 무시하십시오 - 선 diff 는 it's positional 이기 때문에 잘못된 도구이므로 목록을 재정렬하면 거의 모든 행이 변경된 것처럼 보입니다. 이메일과 같은 식별자의 경우 접어 넣지만 출력의 원본 텍스트를 보존하고 비교하기 전에 공백을 자르고 사람들이 조정하는 목록이 일반적으로 고객 데이터이므로 브라우저에서 수행하십시오.

두 목록을 비교하는 것이 실제로 어떤 질문에 답합니까?

이름이 지정된 연산을 보면 도형이 분명해집니다. 주어진 목록 A 와 목록 B:

  • 교차로- what's 둘 다에서? 어느 가입자는 또한 고객을 지불하고 있습니다. which of last month's SKUs are still in this month's catalogue.
  • A 빼기 B- what's only in A? CRM 의 어떤 사용자들이 결제로 만들지 않았습니다. 어떤 파일들이 로컬에 존재하지만 서버에는 존재하지 않습니다.
  • B 빼기 A- what's 는 B 에서만? 반대 방향의 같은 질문,그리고 it's a 다른 질문. Missing-from-billing 과 missing-from-CRM 은 두 가지 뚜렷한 원인을 가진 두 가지 별개의 버그입니다.
  • 대칭 차이- 정확히 하나의 목록에 있는 what's? 두 차이의 합집합: 방향에 상관없이 일치하지 못한 모든 것. 이것은 "what's out of sync?" 질문입니다.
  • 유니온- 두 목록 중 하나에서 모든 것이 중복 해제되었습니다. 병합이 올바르게 완료되었습니다.
  • 목록 내에서 중복됩니다- 혼자 A 안에서 반복되는 what's? 이 것은 전혀 비교가 되지 않는데,it's 는 항상 당신이 필요로 했던 것으로 판명되는 질문입니다. 왜냐하면 it's 는 이중 전송과 이중 청구를 유발하는 원인이기 때문입니다.

그 마지막은 분리할 가치가 있습니다. 교차 목록 일치와 목록 내 중복은 독립적입니다: 주소는 A 에 두 번 나타날 수 있습니다 그리고 또한 B 에 나타납니다. 교차 목록 결과만 보고하는 도구는 비용이 드는 실패를 놓칩니다.

여기에 있는 모든 것은 SQL에서 이미 알고 있는 작업에 직접 매핑됩니다 INTERSECT, EXCEPT, UNION- 그리고 스프레드시트 공식에. 전용 도구의 값은 당신이 할 수있는 일을 isn't; it's 모든 여섯 가지 답변이 하나의 붙여넣기에서 표시, 대신 여섯 가지 다른 수식.

목록 비교를 위해 diff 도구가 잘못된 선택인 이유는 무엇입니까?

이것은 내가 가장 많이 보는 실수이며, "두 개의 lists&quot 비교; 및 "diff two files" sound like synonyms 때문에 정확하게 말할 가치가 있습니다.

차이는 위치적입니다. Diff 알고리즘은 최소 편집 스크립트를 계산합니다 - 한 시퀀스를 다른 시퀀스로 바꾸는 삽입 및 삭제의 가장 짧은 시퀀스. That's 소스 코드 및 산문에 대한 올바른 모델,여기서 39 행 다음에 오는 40 행은 의미있는. 함수를 이동하면 diff 가 함수를 이동했다고 올바르게 보고합니다.

리스트는 의미 있는 순서가 없다. CRM 내보내기의 행 300 은 청구 내보내기의 행 300 과 아무런 관계가 없습니다. They're 데이터베이스가 반환한 순서에 관계없이 우연히 기록되는 항목의 두 봉지.

순서 없는 데이터를 위치 알고리즘에 공급하면 잡음이 발생합니다. 동일한 내용의 두 목록을 가져와서 그 중 하나를 정렬하고 차이점을 만듭니다:

List A          List B
alice           bob
bob             alice
carol           carol

차이점이 이를 보고합니다 alice 를 제거하고 다시 추가하였거나, 또는 그 bob 이동됨 - 둘이 얼마나 다르게 정렬되는지에 비례하여 약간의 이탈이 발생합니다. 정답은 아무것도 바뀌지 않았다니다. 모든 항목은 두 목록에 있습니다. 세트는 동일합니다. A diff can't say that because it isn't asking about membership.

비교표는 도구가 두 가지를 모두 찾는 사람들의 마음 속에 실제로 겹치기 때문입니다:

목록 비교 텍스트 차이
모델 순서가 지정되지 않은 항목 세트입니다 정렬된 줄 순서입니다
주문이 중요합니까? 아니요 - 자유롭게 재정렬하면 결과가 동일합니다 예 - 재정렬은 변경 사항으로 표시됩니다
답변 멤버십: 둘 다 A, B만 중복됩니다 편집: A를 B로 변환하려면 무엇을 삽입/삭제해야 합니까
중복 항목 그룹으로 명시적으로 보고됩니다 그냥 더 많은 라인
좋은 내보내기, 이메일 목록, ID, SKU, 재고 조정 소스 코드, 산문, 구성 파일 등 위치가 의미하는 모든 것
나쁜 문서의 두 가지 버전을 비교합니다 정렬 순서가 임의적인 모든 목록입니다

규칙: 만약 you'd 가 리스트를 다르게 정렬하는 것에 똑같이 만족한다면,당신은 정해진 비교를 원한다. 행의 순서를 바꾸는 것이 보고할 가치가 있는 실제 변경이라면 다음을 원합니다 텍스트 차이 검사기니다.평평한 선이 아닌 중첩이 있는 구조화된 데이터의 경우 둘 다 적용되지 않습니다. - that's what the JSON 차이점 라인이나 멤버십이 아닌 키 경로로 비교하기 때문입니다.

대소문자 민감도는 어떻게 작동해야 합니까?

이것은 사람들이 기본값으로 떠난 다음 조용히 잘못되는 옵션이므로 it's는 한 번 생각해 볼 가치가 있습니다.

대소문자를 구분하지 않는 매칭은 대부분의 사람들이 비교하는 데이터에 적합한 기본값입니다. 이메일 주소,사용자 이름,도메인 이름,제품 코드,국가 코드 - 이들은 실제로 일반적으로 대소문자를 구분하지 않습니다 [email protected] 그리고 [email protected] 중요한 모든 시스템에서 동일한 사람입니다.

There's 현학 주의 사항 here that's worth knowing because it's 가끔 하중 지지: per RFC 5321이메일 주소의 도메인 부분은 대소문자를 구분하지 않지만 로컬 부분 - 이전의 모든 것 @- 는 형식적으로 대소문자를 구분하며 수신 메일 서버에 맡겨 해석합니다. 그래서 [email protected] 그리고 [email protected] 원칙적으로 다른 사서함 수 있습니다. 실제로 본질적으로 모든 주요 공급자는 동일한 것으로 취급하고,만약 you're 메일링 리스트를 중복 해제하면 절대적으로 대소문자를 접어야 합니다. 그러나 만약 you're 디버깅 왜 하나의 특정 주소가 반송되는지,that's 중요 밝혀 세부 사항의 종류.

사례-민감한 일치가 case 가 정보를 나르는 아무거나를 위해 정확하다: 리눅스 파일 경로,base64 끈,해시, JWT 토큰,API 열쇠,Git SHAs,대부분의 프로그램 식별자. 암호 해시의 명부에 접히는 케이스는 명백한 가치를 합병하고 당신에게 자신있게 틀린 대답을 줄 것이다.

옵션 자체보다 더 중요한 구현 세부 사항: 일치하려면 대소문자를 접으되 원본 텍스트를 표시합니다. 붙여넣기하면 [email protected] 그리고 공구는 당신에게 그것을 말한다's 두 명부 전부에서, 그것은 돌려주어야 한다 [email protected]- 아니다 [email protected]니다. 출력을 낮추면 도중에 데이터가 조용히 손상되고 일반적인 다음 단계는 결과를 다른 곳에 붙여 넣기 때문에 그 손상은 이동합니다. 도구는 각 항목의 처음 본 형태를 유지하고 장면 뒤에 접힌 키에 일치하므로 나오는 것은 넣는 것입니다.

공백은 동일한 대우를 받을 자격이 있고 생각이 덜 듭니다. 스프레드시트에서 열을 복사하거나 다음과 같은 줄을 분할합니다 a, b, c 쉼표에는 주요 공백을 포함하는 항목이 표시됩니다. [email protected] 그리고 [email protected] 는 다른 문자열 및 동일한 주소입니다. 트리밍은 기본적으로 그 이유로 켜져 있으며,it's 옵션 you'd 는 실제 사용 후 약 30 초 이내에 누락된 것을 알립니다.

어떤 구분자를 사용해야 하나요?

기본값은 한 줄에 하나의 항목으로, 스프레드시트 열을 붙여넣으면 클립보드가 개행으로 구분된 값을 넘겨주므로 Excel, Google Sheets 또는 CSV 내보내기에서 보낸 이메일 열이 다시 포맷되지 않고 삭제됩니다.

다른 구분 기호는 이미 인라인으로 도착하는 데이터를 다룹니다. 단일 CSV 행 또는 복사 된 배열에 대한 쉼표. 주소 목록에 대한 Outlook 및 이전 Windows 규칙에 대한 Semicolon. 쉘 출력을위한 공간 - ls, git diff --name-only 파이프로 통과했습니다 tr는, 공간 구분된 무엇이든. 스프레드시트에서 수직이 아닌 수평으로 붙여넣은 행에 대한 탭입니다.

주의할 점: 쉼표로 나누는 것은 아닙니다 CSV 구문 분석. 실제 CSV 필드에는 따옴표 안에 쉼표가 포함될 수 있으며 순진한 분할은 찢어집니다 "Smith, Jane" 두 항목으로. 만약 you're 인용 필드가 있는 정품 CSV 파일에서 하나의 열을 뽑아내면, 를 통해 실행합니다 CSV 뷰어 첫째로 - 그것은 실제적인 RFC 4180 인용 규칙을 실행합니다 - 그 후에 당신이 원하는 란을 베끼십시오. 아무 묻힌 쉼표도 없는 전자 우편 또는 ID 의 편평한 명부를 위해,분할은 정밀합니다 이 doesn't 는 올라옵니다.

빈 항목은 기본적으로 삭제됩니다. 왜냐하면 they're 거의 항상 아티팩트: 붙여넣기 끝에 있는 후행 개행,스프레드시트의 빈 행,이중 쉼표입니다. 빈 문자열 isn't 실제로 관심 있는 모든 목록의 항목입니다. 이 옵션은 you're 특별히 내보내기에서 빈 행을 검색하는 경우 존재하며,이는 흔하지 않은 경우 실제 원하는 것입니다.

비교 척도는 어떻게 되나요?

두 목록을 비교하는 순진한 접근 방식은 중첩 루프입니다: A의 모든 항목에 대해 B를 모두 스캔합니다. That's O(n×m) 및 it's는 백 항목에 대해 괜찮고 5만 항목에는 사용할 수 없습니다. 여기서 you're는 25억 문자열 비교를 수행합니다.

올바른 접근 방식은 각 목록을 비교 키 - 항목의 접힌,잘린 형태 - 에 의해 키 해시 맵으로 인덱싱하며 값은 처음 본 원본입니다. 각 인덱스를 구축하는 것은 하나의 선형 패스입니다. 그런 다음 모든 질문은 항목 당 일정한 시간 조회가됩니다: 이 키는 B & # 39;s 맵입니까? 전체 비교는 O (n + m) 이며,이는 각 측면의 2 만 항목이 4 만 해시 작업이며 브라우저가 다시 칠할 수있는 것보다 빠르게 완료된다는 것을 의미합니다.

동일한 인덱스는 중복을 무료로 제공합니다. 키당 발생 횟수를 구축하는 동안; 1 이상의 개수를 가진 모든 키는 해당 목록 내에서 중복됩니다. 두 번째 패스도 없고 추가 구조도 없습니다.

실제로 천장은 isn't 비교 - it's 브라우저 렌더링 결과 그룹 오만 행 텍스트 영역으로. 산술에 관계 없이 밀리 초에서 끝납니다. you're 일상적으로 그렇게 큰 목록을 조정 하는 경우,당신은 아마 탭 보다는 스크립트에서이 원하는,위의 알고리즘은 어떤 언어 든 지에서 열 줄에 대 한.

정렬은 참고할 가치가 있습니다. 결과는 기본적으로 자연스럽게 정렬되며,이는 숫자 인식: 을 의미합니다 item2 전에 item10그 이후가 아닙니다. 일반 사전 편찬 정렬이 적용됩니다 item10 첫째로 왜냐하면 1 < 2 문자열 비교의 문자에 의해 정확하고 ID 또는 버전 이름을 스캔 할 때 모든 인간의 기대에 의해 잘못 문자별로. 정렬을 끄고 당신은 삽입 순서를 얻을 - 그들이 A 에 처음 등장 순서의 항목,다음 B - 가끔 당신이 원하는 때 원래 순서는 최신성 같은 것을 인코딩.

실제로 이것은 어떻게 생겼습니까?

I've 가 실제로 이것을 사용한 4 개의 시나리오는 각각 다른 결과 그룹에 매핑됩니다.

보내기 전에 메일링 리스트를 청소합니다. 새 목록과 이전에 보낸 목록을 붙여넣습니다. A에서만 는 누구 hasn't 에 의하여 연락되었습니다 - that's 당신의 보내기 명부. 둘 다에서 is who'd 중복받기. A에서 중복됩니다 는 이 페이지의 맨 위에 있는 이야기에서 나온 40 명의 사람들입니다. 그 수표는 십오초가 걸리고 it's 는 지원 엔지니어에게 한 시간을 절약해 주었을 것입니다.

두 시스템을 조정합니다. CRM에서 A로, 청구에서 B로 사용자 이메일을 내보냅니다. A에서만 가입했지만 청구되지 않음; b 에서만 는 청구-하지만-누락-CRM 에서. 이들은 두 개의 서로 다른 버그입니다. 첫 번째는 깨진 웹 후크,두 번째는 수동 송장 누군가가 흐름 밖에서 제기 될 수 있습니다. 단일 "these 목록 different" 대답은 완전히 모호하게 될 것입니다,정확히 왜 양방향이 별도로보고됩니다.

재고 및 카탈로그 드리프트. 지난 달's SKU 수출이 달's 에 대하여. A에서만 단종되었습니다 b 에서만 는 새로운, 둘 다에서 이월됩니다. 여기서 문제를 정렬합니다. 내보내기는 서로 다른 주문으로 서로 다른 시스템에서 나오며 diff는 전체 파일을 변경된 것으로 보고합니다.

배포 건전성 검사. 스테이징에 관한 파일과 프로덕션에 관한 파일, 둘부터 ls 공간 구분 기호가 붙여진 출력입니다. A에서만 는 무엇 hasn't 아직 출고.

네 가지 모두에 걸쳐 패턴: 유용한 대답은 거의 "목록이 다릅니다." It's 어느 품목, 에서 어느 방향 - 정확하게 어떤 집합 연산이 당신에게 무엇을 주고 어떤 유사성 점수나 차이점 요약이 주는가't.

내 목록이 어디에나 업로드되어 있습니까?

아니, 그리고 잠시 동안 당신이 & # 39;d이 같은 도구에 붙여 넣기 무엇에 대해 생각합니다.

It's a subscriber export. A list of customer emails. Employee IDs. License keys. Account number. 사람들이 조정하는 목록은 그 성격상 조직이 보유하고 있는 가장 민감한 데이터에 가깝습니다. - you don't reconcile lists of nothing,you reconcile lists of 사람들. 그리고 "이 2 천 개의 고객 이메일을 임의의 웹 사이트에 붙여 넣어서 overlap"을 확인하도록하겠습니다. 많은 관할권에서 that & # 39;s 는 계약없이 방금 만든 프로세서 관계이기 때문에 감기를 멈추어야하는 문장입니다.

There's no reason for this computation to touch the network. It's hash maps over strings - 의존성이 없는 TypeScript 의 몇백 줄. Toolz.dev 에 있는 도구는 탭에서 완전히 실행됩니다; 목록은 브라우저의 JavaScript 문자열이며's 메모리와 그들은 결코 그것을 떠나지 않습니다. 업로드,로그 또는 저장되지 않습니다. you'd 가 그러한 주장을 확인하는 방식으로 확인: 네트워크 탭을 열고 비교를 누르거나 wifi 를 끄고 계속 작동하는 것을 지켜보십시오. I've written more on why this architecture matters for exactly this class of data in 브라우저 기반 도구가 서버 측 도구를 이기는 이유.

자주 묻는 질문

두 목록을 비교하여 공통점을 찾으려면 어떻게 해야 합니까?

하나의 목록을 목록 A 에 붙여넣고 다른 하나는 목록 B 에 붙여넣고 비교를 누릅니다. "In Both" group is the nextter - every item present in both lists. 그 그룹을 자체적으로 복사하거나,텍스트 파일로 다운로드하거나,Copy Report 로 모든 그룹을 한 번에 내보낼 수 있습니다. does't matter 를 주문하면 목록 don't 도 같은 방식으로 정렬해야 합니다.

한 목록에는 있지만 다른 목록에는 없는 항목을 어떻게 찾을 수 있습니까?

The "Only in A" and "Only in B"그룹들은 그렇게 대답하고,they're 는 의도적으로 분리된다. 오직 A 에서만 리스트 B 에서 누락된 항목을 보유한다; 오직 B 에서만 리스트 A 에서 누락된 항목을 보유한다. 이것들은 보통 다른 원인으로 다른 문제들이다 - missing-from-billing and missing-from-CRM aren't the same bug - 그래서 그것들을 하나의 답으로 붕괴시키는 것은 필요한 정보를 잃는다. "Unique" group 은 대칭적인 차이를 원한다면 둘 다 결합한다.

단일 목록에서 중복을 찾을 수 있습니까?

예. A 에서 중복 및 B 에서 중복은 해당 목록 내에서 두 번 이상 나타나는 모든 별개의 항목을 나열합니다. 이는 교차 목록 일치와 무관하므로 항목은 A 에서 중복되고 B 에 존재할 수 있습니다. It's 일반적으로 목록 내 중복이 중복 이메일 및 이중 청구의 원인이기 때문에 실제로 가장 중요한 검사입니다.

대문자가 비교에 영향을 미칩니까?

원하는 경우에만 가능합니다. 대소문자 구분 매칭은 기본적으로 꺼져 있으므로 [email protected] 그리고 [email protected] 는 하나의 항목으로 취급됩니다 - 그리고 출력은 데이터를 낮추는 대신 붙여넣은 어떤 형태이든 보존합니다. case 가 의미를 전달하는 값에 대해서는 켜십시오: Linux 경로,base64 문자열,해시, API 키,Git SHAs.

What's 이것과 텍스트 차이 도구의 차이점은 무엇입니까?

diff 는 positional 입니다: 1 행을 1 행과 비교하고 한 시퀀스를 다른 시퀀스로 바꾸는 데 필요한 편집을 계산하므로 목록을 재정렬하면 거의 모든 행이 변경됩니다. 이 도구는 순서를 완전히 무시하고 각 측면에 항목이 있는지 여부만 묻습니다. position 이 의미하는 코드 및 산문에 diff 를 사용하십시오; 정렬 순서가 임의인 내보내기를 조정하기 위해 list compare 를 사용하십시오.

새 줄 대신 쉼표로 구분된 목록을 비교할 수 있습니까?

예 - 구분 기호를 쉼표, 세미콜론, 공백 또는 탭으로 전환합니다. 각 항목 주위의 공백은 기본적으로 트리밍됩니다 a, b, c 세 개의 깨끗한 항목으로 분할합니다. 한 가지 주의 사항: 쉼표 isn't real CSV 구문 분석에서 분할하므로 데이터에 쉼표가 포함된 필드가 인용된 경우 먼저 적절한 CSV 도구로 열을 추출합니다.

얼마나 많은 항목을 처리할 수 있습니까?

비교는 각 목록을 해시 맵으로 인덱싱하고 중첩된 루프를 사용하지 않고 선형 시간으로 실행되므로 각 측면에 수만 개의 항목이 밀리초 단위로 완료됩니다. 실용적인 천장은 브라우저가 비교 자체가 아니라 매우 큰 결과 그룹을 페이지로 렌더링하는 것입니다.

내 목록이 어디에나 업로드되어 있습니까?

아니요. 모든 구문 분석 및 비교는 브라우저에서 JavaScript 로 발생합니다 - 아무 것도 전송되거나 기록되거나 저장되지 않습니다. 사람들이 조정하는 목록은 일반적으로 고객 이메일,직원 ID 또는 라이센스 키이기 때문에 대부분의 도구보다 여기에서 중요합니다. 비교하는 동안 네트워크 탭을 보거나 오프라인으로 전환하면 계속 작동합니다.


관련 도구: 텍스트 차이 검사기 질서와 위치가 중요할 때, JSON 차이점 구조화된 데이터의 경우 CSV 뷰어 실제 CSV에서 컬럼을 추출하기 위해 워드 카운터 빠른 계산을 위해. 추가 읽기: 브라우저 기반 도구가 서버 측 도구를 이기는 이유 그리고 웹 개발자's 툴킷.

Frequently Asked Questions

Paste one list into List A, the other into List B, and press Compare. The "In Both" group is the intersection — every item present in both lists. You can copy that group on its own, download it as a text file, or export every group at once with Copy Report. Order doesn't matter, so the lists don't need to be sorted the same way.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!