What zip is doing here is taking a list of inputs, in this case list_of_a_values, list_of_b_values, list_of_c_values (it can take any number of inputs) and returning a python object that can be iterated over. Each iteration takes an element from each of the inputs.

We can use python unpacking and list comprehensions to write this in a more compact way:

Using numpy we can in fact make this slightly more efficient as we can generate a large 3 by N array of random integers (note that numpy's random number generator does not follow the same seeded path as python's standard lib):