>>> list(flatten([1])) [1] >>> list(flatten([[1, 2], [1, 2]])) [1, 2, 1, 2] >>> list(flatten([[[1], [2]], [[1], [2]]])) [1, 2, 1, 2] >>> list(flatten(((1, 2), (1, 2)))) # Don't flatten tuples [(1, 2), (1, 2)] >>> list(flatten((1, 2, [3, 4]))) # support heter
(seq, container=list)
| 273 | |
| 274 | |
| 275 | def flatten(seq, container=list): |
| 276 | """ |
| 277 | |
| 278 | >>> list(flatten([1])) |
| 279 | [1] |
| 280 | |
| 281 | >>> list(flatten([[1, 2], [1, 2]])) |
| 282 | [1, 2, 1, 2] |
| 283 | |
| 284 | >>> list(flatten([[[1], [2]], [[1], [2]]])) |
| 285 | [1, 2, 1, 2] |
| 286 | |
| 287 | >>> list(flatten(((1, 2), (1, 2)))) # Don't flatten tuples |
| 288 | [(1, 2), (1, 2)] |
| 289 | |
| 290 | >>> list(flatten((1, 2, [3, 4]))) # support heterogeneous |
| 291 | [1, 2, 3, 4] |
| 292 | """ |
| 293 | if isinstance(seq, str): |
| 294 | yield seq |
| 295 | else: |
| 296 | for item in seq: |
| 297 | if isinstance(item, container): |
| 298 | yield from flatten(item, container=container) |
| 299 | else: |
| 300 | yield item |
| 301 | |
| 302 | |
| 303 | T_ = TypeVar("T_") |
no outgoing calls
searching dependent graphs…