They all have a similar form.
"How do I flatten this list [ [ 1, 2, 3 ], [ 4, 5, 6 ], ... , [ 98, 99, 100 ] ]?"
The answers include list comprehensions, itertools, and other clever variants.
You're Doing it Wrong
The only way to create a nested list is to append a list to a list.
theList.append( aSubList )
You can trivially replace this with the following
theList.extend( aSubList )
Now, your list is created flat. If it's created flat, you never need to flatten it.
Obscure Edge Cases
Sometimes it may be necessary to have both a flattened and an unflattened list. I'm unclear on when or how this situation arises, but this may be edge case that makes some of itertools handy.
For the past 3 decades, I've never seen the "both nested and not nested" use case, so I can't fathom why or how this would arise.
Visiting a Tree
Interestingly, a tree visitor has a net effect somewhat like "flattening". However, it does not actually create an intermediate flat structure. It simply walks the structure as it exists. This isn't a proper use case for transforming a nested list structure to a flat structure. Indeed, this is a great example of why nested structures and flat structures are quite separate use cases.