要比對兩個清單是否有重複,意思是將兩份以行為基礎的獨立清單進行比對,找出哪些項目同時出現在兩份清單中,以及哪些項目只出現在其中一份。最快的方法是將清單 A 和清單 B 貼到本機的集合運算工具中,選擇是否讓字母大小寫影響成員判定,然後一次讀取五個標示清楚的區塊:同時出現在兩份清單的項目(也就是重複項目)、只出現在 A、只出現在 B、兩份的聯集,以及對稱差集(只出現在其中一份的項目)。每一行經過修剪後的非空白行都算一個成員,空白行會被略過,而每個重複鍵第一次出現的拼法會顯示出來。整個運算完全在瀏覽器中進行,因此不會上傳、儲存或傳送任何資料給 AI。限制為每份清單一百萬個 UTF-16 程式碼單位與 5 萬行,超過任一限制會產生明確的錯誤訊息。這個工作流程可用於電子郵件名單、出席人員名冊、庫存編號、白名單、網址集合、關鍵字組,或任何在一行代表一個字面項目的集合比對情境中。

compare two lists for duplicates
Compare Two Lists for Duplicates Without Uploading

單一清單內的重複 vs. 兩份清單之間的重複

「重複」一詞依情境不同可能有兩種意思。在單一清單中,重複指的是同一個值在該清單中出現兩次或以上;清理這類重複是單行去重工具的工作,例如移除重複行教學,它會保留每一行的第一次出現。在兩份清單之間,重複指的是成員鍵同時出現在兩份清單中的項目,這正是比較兩個清單工具設計來處理的工作。這兩種操作雖然共用「重複」這個詞,但回答的是不同問題,選用正確的工具很重要。如果你的目標是在匯入某處之前精簡單一欄位,請使用單一清單去重工具。如果你的目標是將賓客名單與報名匯出檔進行核對、在舊訂閱者名單與新訂閱者名單中找出同時存在的電子郵件,或比對兩次檔案名稱爬蟲結果的重疊部分,請將兩欄資料貼到比較工具,然後讀取「同時出現」區塊。

逐步教學:比較兩個清單找出重複

  1. 在純文字編輯器中準備清單 A 和清單 B。每行放一個項目:電子郵件地址、SKU 編號、出席者姓名、網址、檔名,或任何一行代表一個比對鍵的字串。
  2. 開啟「比較兩個清單」,將清單 A 貼到 List A 欄位,將清單 B 貼到 List B 欄位。請直接從來源貼上,不要重新輸入,這樣才不會因為打錯字而掩蓋真正的重複。
  3. 選擇大小寫區分政策。預設為不區分大小寫,因此 Apple 和 apple 視為同一個成員鍵。如果你希望「John」和「john」算作不同成員,請切換為區分大小寫。
  4. 點擊「比較」。會出現五個標示清楚的區塊:同時出現 (IN BOTH)、只在 A (ONLY IN A)、只在 B (ONLY IN B)、聯集 (UNION),以及恰好不重疊 (EITHER NOT BOTH)。IN BOTH 就是你要的直接重複答案。
  5. 仔細讀取每個區塊。IN BOTH 列出兩份清單中都出現的項目,保留在清單 A 中第一次出現的拼法與順序。ONLY IN A 和 ONLY IN B 是方向性的差異。UNION 包含兩份清單中的所有成員,先依在 A 中的首次出現順序排列,再加入 B 中新出現的成員。EITHER NOT BOTH(對稱差集)包含恰好出現在其中一份的項目。
  6. 使用複製動作複製標示好的報表。剪貼簿會收到固定順序的五個大寫標題,內容以 LF 分隔,空白區塊會以 em dash 取代,讓缺席狀態保持可見。
  7. 將報表貼到目的地系統,並在將任何結果視為權威結論前,先確認字面行政策。下游系統若採用不同的正規化規則(Unicode 易混淆字、小寫化的電子郵件、修剪後的編號),可能會合併工具視為不同的成員,或拆開工具視為同一的成員。

工具回傳的五種檢視

「比較兩個清單」畫面上的五個標籤對應到MDN 的 JavaScript Set 方法參考資料以及Python 內建集合類型所記載的標準集合運算。每種運算都有精確的定義,並對你的兩份清單回答不同的問題。

Operation工具標籤定義使用情境
IntersectionIN BOTH成員鍵同時出現在 A 和 B 的成員找出跨兩份清單的重複項目
A differenceONLY IN A出現在 A 但不在 B 的成員找出 B 中缺少的項目
B differenceONLY IN B出現在 B 但不在 A 的成員找出 B 中新增的項目
UnionUNION來自任一份清單的每一個不同成員產生合併後的唯一清單
Symmetric differenceEITHER NOT BOTH恰好出現在其中一份清單的成員找出任一側需要關注的項目

若 A 包含 apple、banana、pear,B 包含 banana、peach,則 IN BOTH 的結果為 banana。ONLY IN A 為 apple 和 pear。ONLY IN B 為 peach。UNION 為 apple、banana、pear、peach。EITHER NOT BOTH 為 apple、pear、peach。相同的陣列同時驅動可見的面板與複製的報表,因此你讀到的就是你會貼上的內容。

大小寫區分、空白處理,以及何者算作重複

工具在比對前會對每一行進行正規化。CRLF 與單獨的 CR 行結尾會轉為 LF,前後空白會被修剪,空白行則會整行捨棄。行內空白在修剪後仍會保留,因此「Project Alpha」與「Project Alpha」因為內部空格不同而仍是不同的成員。所選的大小寫規則會同時套用於去重以及全部五種運算。在不區分大小寫模式下,Apple 與 apple 共用同一個成員鍵,並顯示第一次出現的拼法(若 Apple 先出現在清單 A 中,則顯示 Apple)。在區分大小寫模式下,這兩行會被視為不同成員,並可能同時出現在結果中。工具不會剖析 CSV、拆分逗號、正規化 Unicode、移除標點、以數值方式比較數字、解析網址,也不會進行模糊比對。一行實體行就是一個字面項目,依所選的大小寫規則而定,因此請依目的地系統對相同項目的正規化方式來準備輸入資料。

輸入限制與錯誤處理

每個輸入文字區域的上限為一百萬個 UTF-16 程式碼單位與 5 萬行。這些上限讓分割、建立對應、渲染與剪貼簿輸出在各瀏覽器中都能保持可預測。若兩份經正規化的清單皆為空,或任一上限被超過,工具會回傳明確的錯誤,而不是部分結果。錯誤訊息不會包含部分報表,因此該次比對視為尚未執行。如果你經常觸及這些上限,最乾淨的做法是使用「文字檔分割器」切割清單、逐一比對每對,再用「文字檔合併器」將標示好的區塊合併回去,這些操作都會在本機執行。編輯任一文字區域會清除先前的結果,因此每次貼上變動後請重新執行比對,以查看更新後的輸出。

重複偵測真正派上用場的實務情境

比對兩份清單找出重複是最常見的資料清理工作之一。以下幾個例子都很適合這個工具的設計:

  • 電子郵件行銷。將舊的訂閱者匯出檔貼到 A,將新的同意訂閱名單貼到 B。IN BOTH 告訴你哪些人已經在名單上,而 ONLY IN B 則是下一檔活動乾淨的全新名單。
  • 庫存與 SKU。將倉庫 A 的庫存編號貼到 A,將倉庫 B 的編號貼到 B。ONLY IN A 是需要調撥的庫存,ONLY IN B 則是目的地已經存在的庫存。
  • 活動名冊。將報名系統匯出檔貼到 A,將安檢報到名單貼到 B。IN BOTH 是所有已報名者,ONLY IN B 則是臨時入場者或工作人員。
  • 白名單與黑名單。將目前的白名單貼到 A,將候選新增檔案貼到 B。IN BOTH 表示已經涵蓋,可以直接跳過;ONLY IN B 才是你真正需要新增的部分。
  • 遷移檢查。將來源系統的編號貼到 A,將目的地系統的編號貼到 B。對稱差集(EITHER NOT BOTH)會顯示出恰好只存在於一側的每個編號,這是核對總數對不上時第一個該檢查的地方。
  • 檔名或網址清理。將同一目錄的兩次爬蟲結果分別貼到 A 和 B。UNION 是兩次爬蟲觸及的全部檔案集合,IN BOTH 則是重疊的部分。

隱私與本機處理

所有運算都在你的瀏覽器中進行。文字區域、正規化處理、集合運算、五個面板的渲染,以及剪貼簿寫入,全部都在本機裝置上完成。沒有任何輸入或結果會被上傳、儲存、記錄到比對服務,或傳送給 AI 模型。剪貼簿寫入只有在瀏覽器確認寫入成功後才會回報成功;若瀏覽器拒絕剪貼簿權限,工具會顯示手動複製指示,而不是假裝複製成功。實作上採用穩定的 JavaScript map 物件,而非最新的原生 Set 方法,藉此避免瀏覽器相容性依賴,同時保留與 MDN 和 Python 標準程式庫記載相同的集合語意。對於涉及敏感清單(如客戶名冊或內部編號)的工作,這種純本機設計代表第三方比對服務永遠不會看到你任何一行的資料。

若想深入了解,請參閱批次為文字加上行號,無需上傳。