How to get such rule with a elegant method
Tuples /@ Thread[list -> List /@ list2]
{ {1 -> {7, 89}, 2 -> {7, 89}, 3 -> {7, 89}, 5 -> {7, 89}}, {5 -> {96, 5}, 3 -> {96, 5}, 9 -> {96, 5}, 11 -> {96, 5}, 12 -> {96, 5}}, {5 -> {-6, -98}, 9 -> {-6, -98}, 10 -> {-6, -98}, 16 -> {-6, -98}} }
MapIndexed[# -> list2[[#2[[1]]]] &, list, {2}]
or
ReplacePart[list, {i_, j_} :> list[[i, j]] -> list2[[i]]]
Thread /@ Thread[list -> Hold /@ list2] // ReleaseHold
Thread /@ Thread[list → Unevaluated /@ list2] /. a_ → b_ -> a -> b
Thread /@ Thread[list -> $ /@ list2] /. $ -> (# &)
As to the reason why I used RightArrow
as a medium in the second solution, you may want to read this post.