Skip to content

Flatten ​

The collection with all levels of nested lists merged into one.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageFlatten✓
Flatten(collection)every level of nested lists merged into one.
Flatten(collection, n)flattening limited to the top n levels.
Flatten(collection, PositiveInfinity)an explicit infinite depth, the same as the default.
Flatten(collection, {{p1}, {p2}, …})a permutation-shaped list of levels regroups the array's dimensions — transposing a matrix, say.
Flatten(expr)nested calls of any one head flatten, not just ListList's.
Typed signatures
TypePackageApplies
(value, integer?) -> listcompute-enginealways
(any, any?) -> anycombinatoricsreplaces compute-enginealways

Domain: Collections

Details
  • Undoes Partition: chunking and then re-flattening recovers the original list.
  • Simply deletes inner braces/levels; it doesn't otherwise reorder or transform elements.
  • A depth argument limits flattening to that many levels, leaving deeper nesting intact.
  • Any single head's nested calls flatten, not just ListList's.

Examples

1 more kept as data, checked against the oracles
Basic #
live ↗
InFlatten([[1,2],[3,4]])\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack)Out[1,2,3,4]\bigl\lbrack1, 2, 3, 4\bigr\rbrack
live ↗
InFlatten([[1,[2,3]],[4]])\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack\bigr\rbrack, \bigl\lbrack4\bigr\rbrack\bigr\rbrack)Out[1,2,3,4]\bigl\lbrack1, 2, 3, 4\bigr\rbrack
live ↗
InFlatten([[a,b],[c,[d],f],[g,[h,k]]])\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, \bigl\lbrack d\bigr\rbrack, f\bigr\rbrack, \bigl\lbrack g, \bigl\lbrack h, k\bigr\rbrack\bigr\rbrack\bigr\rbrack)Out[a,b,c,d,f,g,h,k]\bigl\lbrack a, b, c, d, f, g, h, k\bigr\rbrack
live ↗
InFlatten([[a,b],[c,[d],k],[f,[g,h]]])\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, \bigl\lbrack d\bigr\rbrack, k\bigr\rbrack, \bigl\lbrack f, \bigl\lbrack g, h\bigr\rbrack\bigr\rbrack\bigr\rbrack)Out[a,b,c,d,k,f,g,h]\bigl\lbrack a, b, c, d, k, f, g, h\bigr\rbrack
live ↗
InFlatten([[a,b],[c,[d],k],[f,[g,h]]],1)\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, \bigl\lbrack d\bigr\rbrack, k\bigr\rbrack, \bigl\lbrack f, \bigl\lbrack g, h\bigr\rbrack\bigr\rbrack\bigr\rbrack, 1)Out[a,b,c,[d],k,f,[g,h]]\bigl\lbrack a, b, c, \bigl\lbrack d\bigr\rbrack, k, f, \bigl\lbrack g, h\bigr\rbrack\bigr\rbrack
Scope #

A depth argument limits flattening to just that many levels, leaving deeper nesting intact

live ↗
InFlatten([[1,2],[3,[4]]],1)\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, \bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack, 1)Out[1,2,3,[4]]\bigl\lbrack1, 2, 3, \bigl\lbrack4\bigr\rbrack\bigr\rbrack

Flatten only the first level

live ↗
InFlatten([[a,b],[c,[d],f],[g,[h,k]]],1)\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, \bigl\lbrack d\bigr\rbrack, f\bigr\rbrack, \bigl\lbrack g, \bigl\lbrack h, k\bigr\rbrack\bigr\rbrack\bigr\rbrack, 1)Out[a,b,c,[d],f,g,[h,k]]\bigl\lbrack a, b, c, \bigl\lbrack d\bigr\rbrack, f, g, \bigl\lbrack h, k\bigr\rbrack\bigr\rbrack

Depth 0 leaves the list unchanged

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]],0)\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 0)Out[0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]]\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

Depth 2 removes two levels of nesting

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]],2)\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 2)Out[0,1,2,−2,[3],[−3],[[4]]]\bigl\lbrack0, 1, 2, -2, \bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack, \bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack

Depth 3

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]],3)\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 3)Out[0,1,2,−2,3,−3,[4]]\bigl\lbrack0, 1, 2, -2, 3, -3, \bigl\lbrack4\bigr\rbrack\bigr\rbrack

Depth 4 reaches the deepest level

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]],4)\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 4)Out[0,1,2,−2,3,−3,4]\bigl\lbrack0, 1, 2, -2, 3, -3, 4\bigr\rbrack

An explicit infinite depth flattens every level, like the default

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]],∞)\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, ∞)Out[0,1,2,−2,3,−3,4]\bigl\lbrack0, 1, 2, -2, 3, -3, 4\bigr\rbrack

A list of levels regroups the dimensions, here into a transpose

live ↗
InFlatten([[1,2],[3,4]],[[2],[1]])\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack2\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack)Out[[1,3],[2,4]]\bigl\lbrack\bigl\lbrack1, 3\bigr\rbrack, \bigl\lbrack2, 4\bigr\rbrack\bigr\rbrack

Nested calls of any one head flatten, not just lists

live ↗
InFlatten(f(a,f(b,f(c))))\mathrm{Flatten}(f(a, f(b, f(c))))Outf(a,b,c)f(a, b, c)

A depth limit of 1 removes just one layer of nesting

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]],1)\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 1)Out[0,1,[2,−2],[[3],[−3]],[[[4]]]]\bigl\lbrack0, 1, \bigl\lbrack2, -2\bigr\rbrack, \bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

With no depth given, every level of nesting is removed

live ↗
InFlatten([0,[1],[[2,−2]],[[[3],[−3]]],[[[[4]]]]])\mathrm{Flatten}(\bigl\lbrack0, \bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, -2\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3\bigr\rbrack, \bigl\lbrack-3\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack4\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack)Out[0,1,2,−2,3,−3,4]\bigl\lbrack0, 1, 2, -2, 3, -3, 4\bigr\rbrack
Properties #

FlattenFlatten undoes Partition: chunking and re-flattening recovers the original list

live ↗
InFlatten(Partition([1,2,3,4,5,6],2))=[1,2,3,4,5,6]\mathrm{Flatten}(\mathrm{Partition}(\bigl\lbrack1, 2, 3, 4, 5, 6\bigr\rbrack, 2))=\bigl\lbrack1, 2, 3, 4, 5, 6\bigr\rbrackOutTrue\mathrm{True}

A list with no nesting is unchanged

live ↗
InFlatten([1,2,3])\mathrm{Flatten}(\bigl\lbrack1, 2, 3\bigr\rbrack)Out[1,2,3]\bigl\lbrack1, 2, 3\bigr\rbrack

Flattening an m×nm \times n matrix gives mnmn elements. See Length

live ↗
InLength(Flatten([[1,2,3],[4,5,6]]))\mathrm{Length}(\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack\bigr\rbrack))Out66

A 3×43\times4 array of symbolic entries flattens row by row

live ↗
InFlatten(Array(a,[3,4]))\mathrm{Flatten}(\mathrm{Array}(a, \bigl\lbrack3, 4\bigr\rbrack))Out[a(1,1),a(1,2),a(1,3),a(1,4),a(2,1),a(2,2),a(2,3),a(2,4),a(3,1),a(3,2),a(3,3),a(3,4)]\bigl\lbrack a(1, 1), a(1, 2), a(1, 3), a(1, 4), a(2, 1), a(2, 2), a(2, 3), a(2, 4), a(3, 1), a(3, 2), a(3, 3), a(3, 4)\bigr\rbrack

A three-index array flattens in lexicographic index order, so the digits count up like an odometer

live ↗
InFlatten(Array((_1⁡,_2⁡,_3⁡)↦100_1⁡+10_2⁡+_3⁡,[3,3,3]))\mathrm{Flatten}(\mathrm{Array}((\operatorname{\_1}, \operatorname{\_2}, \operatorname{\_3})↦100\operatorname{\_1}+10\operatorname{\_2}+\operatorname{\_3}, \bigl\lbrack3, 3, 3\bigr\rbrack))Out[111,112,113,121,122,123,131,132,133,211,212,213,221,222,223,231,232,233,311,312,313,321,322,323,331,332,333]\bigl\lbrack111, 112, 113, 121, 122, 123, 131, 132, 133, 211, 212, 213, 221, 222, 223, 231, 232, 233, 311, 312, 313, 321, 322, 323, 331, 332, 333\bigr\rbrack
live ↗
InFlatten(array)\mathrm{Flatten}(\mathrm{array})OutFlatten(array)\mathrm{Flatten}(\mathrm{array})
About
Examples23
Checked againstWolfram Language 23 agreemathlib4 2 agree10 error
CrosswalkWolfram Language

Implementation

mappedmathlib4packages/oracle/src/mappings.ts

A list of lists of numbers, merged one level, which is every level there is. Deeper or ragged nesting and a flat list fail to elaborate, since Lean types them differently from ours.

mappedmathlib4packages/oracle/src/mappings.ts

A depth of one or more over a list of lists of numbers, where that is the same as flattening fully. Depth zero or a negative depth fails to elaborate, as does any nesting deeper than two levels.

See also: Join