Неясно, хотите ли вы, чтобы массивы содержали 1000 или 100000 элементов: 10 5 - это 100000, а не 10000, как указано в вашем вопросе.
Вам не нужно создавать промежуточные массивы. Просто переберите целочисленные переменные. Я получаю сокращение на 23% прошедшего времени (29,1 с против 37,7 с) для 10000 элементов с этим кодом:
#!/usr/bin/python
# iterating to 10**4 generates a 538,995,000 byte file (539MB)
# iterating to 10**5 would produce more than 100x that much
max = 10000
ip = open("input.dat", "w+")
for length in range(1, max+1):
ip.writelines(["%s " % item for item in range(length)])
ip.writelines("\n")
ip.writelines(["%s " % item for item in range(-max, length-max)])
ip.writelines("\n\n")
ip.close()
Время, затрачиваемое на преобразование элементов массива в строки и запись в файл. Создание массивов происходит быстрее, особенно когда создание отложено, как в данном случае. ip.writelines
принимает итеративный объект, который вообще не может быть создан.