The most idiomatic way to deal with this situation is to fasten two lists:
scala> p.zip(q).forall { case (x, y) => x == y * 2 } res0: Boolean = true
You can also use zipped , which may be slightly more efficient in some situations, and also allow you to be more concise (or perhaps just confusing):
scala> (p, q).zipped.forall(_ == _ * 2) res1: Boolean = true
Note that both of these solutions silently ignore additional elements if the lists do not have the same length, which may or may not be what you want.
source share