Position

Position[expr,pattern]

gives a list of the positions at which objects matching pattern appear in expr.

Position[expr,pattern,levelspec]

finds only objects that appear on levels specified by levelspec.

Position[expr,pattern,levelspec,n]

gives the positions of the first n objects found.

Position[pattern]

represents an operator form of Position that can be applied to an expression.

Details and Options

  • Position[expr,pattern] tests all the subparts of expr in turn to try and find ones that match pattern.
  • Position returns a list of positions in a form suitable for use in Extract, ReplacePart, and MapAt. The form is different from the one used in Part.
  • Position looks only for matches to values in Association objects that appear in expr. It returns any part specifications within Association objects in the form Key[k].
  • The default level specification for Position is {0,Infinity}, with Heads->True.
  • A part specification {} returned by Position represents the whole of expr.
  • Position[list,pattern,{1},Heads->False] finds positions only of objects that appear as complete elements of list.
  • Position uses standard level specifications:
  • nlevels 1 through n
    Infinitylevels 1 through Infinity
    {n}level n only
    {n1,n2}levels n1 through n2
  • A positive level n consists of all parts of expr specified by n indices.
  • A negative level -n consists of all parts of expr with depth n.
  • Level 0 corresponds to the whole expression.
  • With the default option setting Heads->True, Position includes heads of expressions and their parts.
  • Position traverses expressions in depthfirst order, yielding lists of indices in lexicographic order.
  • Position[pattern][expr] is equivalent to Position[expr,pattern].

Examples

open allclose all

Basic Examples  (4)

Find the positions at which b occurs:

Find all positions at which x to any power appears:

Find only those down to level 2:

Find positions in an Association:

Find positions with prime values:

Scope  (2)

Find the positions of the first 2 b's that appear on level 1:

Depth-first traversal gives longer lists of indices first:

Generalizations & Extensions  (1)

Position works with any head, not just List:

Options  (1)

Heads  (1)

By default, Position will search expression heads:

Use the option Heads->False to exclude them:

Properties & Relations  (2)

Use Extract to extract parts based on results from Position:

Count returns the length of the result given by Position:

Possible Issues  (1)

Position looks for matches based on patterns, which may not be the same as numerical equality:

Write a pattern using Condition to force searching based on numerical equality:

Introduced in 1988
 (1.0)
 |
Updated in 2014
 (10.0)