# How to find the position of the smaller element in the list

x = {4, 1, 2, 5, 6, 7}
y = {1, 2, 4, 5, 6, 9}


There are two lists x and y. How to find out these positions of the elements in list x are smaller than those in corresponding list y and get the following results:

{2, 3, 6}


Flatten@Position[Negative[x - y], True]


Also possible:

Flatten@Position[x - y, _?(# < 0 &)]


or, as suggested by J.M.,

Flatten[Position[x - y, _?Negative]]

• +1, nice use of Negative! Feb 3 '20 at 13:13
• @corey979 Thanks, I wonder why it is not called NegativeQ rather than Negative btw... ! Feb 3 '20 at 13:15
• @anders, because Negative[] and similar functions don't have to immediately evaluate to True/False (while *Q[] functions do so), which makes them usable in assumptions like Assuming[Negative[x], Simplify[UnitStep[x]]]. (On that note, you can do your last one as Flatten[Position[x - y, _?Negative]]) Feb 3 '20 at 13:26
• @J.M. Thank you for the explanation! Feb 3 '20 at 13:28
Flatten @ Position[Less @@@ Transpose[{x, y}], True]

• Equivalently: Flatten[Position[Thread[x < y], True]] Feb 3 '20 at 13:27
PositionIndex[Sign[x - y]] @ -1


{2, 3, 6}

Also

PositionIndex[UnitStep[x - y]] @ 0 (* thanks: J.M. *)


{2, 3, 6}

PositionIndex[Negative[x - y]] @ True (* thanks: anderstood *)


{2, 3, 6}

PositionIndex[Thread[x < y]]@True


{2, 3, 6}

If you prefer to have {} (rather than Missing["KeyAbsent", _]) as output when no positions satisfy the condition, you can use

Lookup[PositionIndex[Sign[x - y]], -1, {}]
Lookup[PositionIndex[UnitStep[x - y]], 0, {}]
Lookup[PositionIndex[Negative[x - y]], True, {}]

• Another equivalent for the first: Lookup[PositionIndex[UnitStep[x - y]], 0]. Feb 3 '20 at 13:37
• Also: PositionIndex[Negative[x - y]][True] Feb 3 '20 at 14:04