Three-way diff with tagged membership output
Input splits on `#`-prefixed header lines into three blocks. The op computes membership sets for each block and tags each unique value with the lists it appears in: `A`, `B`, `C`, `A+B`, `A+C`, `B+C`. Items present in ALL THREE lists (`A+B+C`) are OMITTED - this is a differences view, not a full inventory.
Output format is `tag\tvalue` per line, tab-separated so it pastes into Excel with the tag as its own column. Order is first-appearance across the three blocks.
Case sensitive off (default) means `Apple` and `apple` tally together. For a value-present-in-all report, use Find common items. For a full diff across any number of lists, use Find distinct items.
How to use compare three lists side by side
- 1Enter your lists, separating them with '# List 1', '# List 2', and '# List 3' headers
- 2Adjust the 'Case sensitive' toggle if needed
- 3Observe the output panel for common, unique, and different items
- 4Copy the results directly from the output panel
- 5Download the output as a plain text file if desired
Keyboard shortcuts
Drive ListShift without touching the mouse.
What compare three lists lets you do
Membership-tagged diff over three `#`-delimited blocks. Items present in every list are dropped.
Tagged row output, one value per line
Every differing value is emitted as `tag⇥value` - where the tag is `A`, `B`, `C`, `A+B`, `A+C`, or `B+C`. The tab before the value means pasting into a spreadsheet puts the tag in its own column. No section headers, no banners, no commentary.
Items in all three lists are suppressed
A value present in every list would tag as `A+B+C` - those rows are dropped. This is a differences-focused view. If you want the set of values common to every list, use Find common items; for a full diff with an inventory flavor, Find distinct items.
Header-delimited input
Paste all three lists into one textarea with lines beginning `# List 1`, `# List 2`, `# List 3` separating them. Any line starting with `#` resets to a new block, so `#a`, `## Bob`, `# Input A` all work. Without headers the op can't find block boundaries.
Case sensitive toggle
Off (default) folds `Apple` / `apple` together under first-seen spelling. On treats them as distinct values, each tagged independently.
Deterministic first-appearance order
Rows are emitted in the order each value first appears when scanning list 1 → 2 → 3. Same input produces identical output every run, so two runs can be diffed against each other.
Worked example
Three-way diff output. `cherry` appears in all three lists so it is omitted. All other items are tagged with their list membership.
# List 1 apple banana cherry # List 2 banana cherry date fig # List 3 cherry date elderberry
A apple A+B banana B+C date B fig C elderberry
Settings reference
How each option changes the output, with the sample above as input.
| Setting | What it does | Effect on the sample |
|---|---|---|
| Case sensitive: on | Compares items with exact casing | No change unless input case differs |
| Case sensitive: off | Ignores case differences | No change in sample as input is uniformly cased |