Skip to content

Level ​

Every subexpression of expr at the given level(s) — level 0 is expr itself.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageLevel✓
Level(expr, n)levels 1 through n
Level(expr, {n})level n alone
Level(expr, {n1, n2})levels n1 through n2
Level(expr, PositiveInfinity)every level, all the way to the leaves
Level(expr, {-1})every leaf, regardless of depth — Wolfram's own "leaves" shorthand
Typed signatures
TypePackageApplies
(any, any) -> list<any>combinatoricsalways

Domain: Collections

Details
  • Wolfram's own POST-ORDER: a node's children (recursively) come before the node itself, so Level({1, {2, 3}, 4}, 2) is {1, 2, 3, {2, 3}, 4} — {2, 3} printed AFTER its own parts, not before them. Siblings keep their original order; only each node's position relative to its OWN descendants moves.
  • A negative level counts depth from the leaves (an atom has depth 1, any other expression 1 more than its deepest part): {-1} is the leaves, {-2} the expressions one step above them, and bare -1 every proper subexpression.
  • No 4th-argument predicate form, and no Heads option.

Examples

Basic #
live ↗
InLevel([1,[2,3],4],1)\mathrm{Level}(\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack, 4\bigr\rbrack, 1)Out[1,[2,3],4]\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack, 4\bigr\rbrack
Scope #
live ↗
InLevel([1,[2,3]],[0])\mathrm{Level}(\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack\bigr\rbrack, \bigl\lbrack0\bigr\rbrack)Out[[1,[2,3]]]\bigl\lbrack\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack\bigr\rbrack\bigr\rbrack

post-order: {2, 3} prints after its own parts 2 and 3

live ↗
InLevel([1,[2,3],4],2)\mathrm{Level}(\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack, 4\bigr\rbrack, 2)Out[1,2,3,[2,3],4]\bigl\lbrack1, 2, 3, \bigl\lbrack2, 3\bigr\rbrack, 4\bigr\rbrack

{-1} is Wolfram's own leaves shorthand

live ↗
InLevel([1,[2,3],4],[−1])\mathrm{Level}(\bigl\lbrack1, \bigl\lbrack2, 3\bigr\rbrack, 4\bigr\rbrack, \bigl\lbrack-1\bigr\rbrack)Out[1,2,3,4]\bigl\lbrack1, 2, 3, 4\bigr\rbrack
live ↗
InLevel([1,[2,[3]]],∞)\mathrm{Level}(\bigl\lbrack1, \bigl\lbrack2, \bigl\lbrack3\bigr\rbrack\bigr\rbrack\bigr\rbrack, ∞)Out[1,2,3,[3],[2,[3]]]\bigl\lbrack1, 2, 3, \bigl\lbrack3\bigr\rbrack, \bigl\lbrack2, \bigl\lbrack3\bigr\rbrack\bigr\rbrack\bigr\rbrack

Level 11 is the single top-level element

live ↗
InLevel([[[[a]]]],1)\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 1)Out[[[[a]]]]\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

Level 22 collects the parts one deeper along with the earlier ones

live ↗
InLevel([[[[a]]]],2)\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 2)Out[[[a]],[[[a]]]]\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

Each added level contributes a more deeply nested piece

live ↗
InLevel([[[[a]]]],3)\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 3)Out[[a],[[a]],[[[a]]]]\bigl\lbrack\bigl\lbrack a\bigr\rbrack, \bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

Down to the innermost atom aa

live ↗
InLevel([[[[a]]]],4)\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 4)Out[a,[a],[[a]],[[[a]]]]\bigl\lbrack a, \bigl\lbrack a\bigr\rbrack, \bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

Asking for more levels than exist changes nothing

live ↗
InLevel([[[[a]]]],5)\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, 5)Out[a,[a],[[a]],[[[a]]]]\bigl\lbrack a, \bigl\lbrack a\bigr\rbrack, \bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack

A list of levels selects just those

live ↗
InLevel([[[[a]]]],[2,3])\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack2, 3\bigr\rbrack)Out[[a],[[a]]]\bigl\lbrack\bigl\lbrack a\bigr\rbrack, \bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack
live ↗
InLevel([[[[a]]]],−1)\mathrm{Level}(\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, -1)Out[a,[a],[[a]],[[[a]]]]\bigl\lbrack a, \bigl\lbrack a\bigr\rbrack, \bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack a\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack
About
Examples12
Checked againstWolfram Language 12 agree
CrosswalkWolfram Language

See also: MapIndexed, Pick