This laziness is genuinely useful. You can `map` over a million-line file without loading a million results into RAM, and you can chain `map` and `filter` together so that only the items actually consumed get computed. But it does mean you must explicitly materialize the result when you want a concrete list: `list(map(…))`. The mental model that fixes everything: `map` sets up a pipeline that’s ready to transform each item as it’s pulled, not a finished list of transformed items. Once you internalize “`map` returns a lazy iterator, wrap it in `list()` to see the values,” the `