PERF: Use generator expression for Blocks.replace_list
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

```
       before           after         ratio
     [852518eb]       [3902ad1a]
     <maybe-convert-less-mem^2>       <replace-use-less-mem>
-      2.68±0.02s       2.35±0.03s     0.88  series_methods.Replace.time_replace_dict(1000)
-       2.73±0.1s       2.38±0.04s     0.87  series_methods.Replace.time_replace_list(1000)
-            203M             105M     0.52  series_methods.Replace.peakmem_replace_dict(100)
-            203M             105M     0.52  series_methods.Replace.peakmem_replace_list(100)
-           1.11G             106M     0.10  series_methods.Replace.peakmem_replace_list(1000)
-           1.11G             106M     0.10  series_methods.Replace.peakmem_replace_dict(1000)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.
```
inplace=True is not covered by benchmarks but should be unchanged.
Might address #6697? > Might address #6697?

Only partially. This optimization only works for inplace=False. We'd need to write our own replace function, to avoid generating the masks. @meeseeksdev backport 2.x @meeseeksdev backport 2.0.x