I believe the following excerpt from "Programming in Scala: A Comprehensive Step-by-Step Guide" (Martin Odersky, Lex Spoon and Bill Venners) directly addresses both of your questions:
Accessing the elements of a tuple
You may be wondering why you can't access the elements of a tuple like
the elements of a list, for example, with "pair(0)". The reason is
that a list's apply method always returns the same type, but each
element of a tuple may be a different type: _1 can have one result
type, _2 another, and so on. These _N numbers are one-based, instead
of zero-based, because starting with 1 is a tradition set by other
languages with statically typed tuples, such as Haskell and ML.
Scala tuples get very little preferential treatment as far as the language syntax is concerned, apart from expressions '(' a1, ..., an ')'
being treated by the compiler as an alias for scala.Tuplen(a1, ..., an) class instantiation. Otherwise tuples do behave as any other Scala objects, in fact they are written in Scala as case classes that range from Tuple2 to Tuple22. Tuple2 and Tuple3 are also known under the aliases of Pair and Triple respectively:
val a = Pair (1,"two") // same as Tuple2 (1,"two") or (1,"two")
val b = Triple (1,"two",3.0) // same as Tuple3 (1,"two",3.0) or (1,"two",3.0)
productIterator
so that it could use a more specific type in some cases. This might be coming for 2.10, but someone correct me if I'm wrong. – Upgrowth