The 'cat' version (print('\n'.join(map(str, ints)))) is fastest because it builds one big string and sends it to print() in a single I/O operation. That drastically reduces the overhead compared to printing each number line by line. Since I/O is the real bottleneck here, minimizing the number of print() calls makes a big difference, even if it feels unintuitive that string manipulation beats a simple loop :)