Используйте модуль csv
и функцию writerows
, чтобы написать список списков в одной строке.
Малый автономный тест:
import random,time
lists = [[random.randint(1,500) for _ in range(100000)] for _ in range(100)]
import csv
start_time=time.time()
with open("out.csv","w",newline="") as f:
cw = csv.writer(f,delimiter=" ")
cw.writerows(lists)
print(time.time()-start_time)
пишет 100 строк 100000 элементов в 2-х секунд на моей машине (генерируя список был медленнее, чем писать их обратно)
Так вы просто ограничивается память вашего входного списка.
EDIT: этот код выше не «транспонируется» должным образом, поэтому он обманывает. Использование zip
(Python 3) делает трюк непосредственно с помощью writerows
поэтому код не изменится:
import random,time
n=1000000
list1 = list(range(1,n))
list2 = list(range(n+1,n*2))
list3 = list(range(2*n+1,n*3))
import csv
start_time=time.time()
with open("out.csv","w",newline="") as f:
cw = csv.writer(f,delimiter=" ")
cw.writerows(zip(list1,list2,list3))
print(time.time()-start_time)
для python2, используйте itertools.izip
потому zip
возвращает список: не эффективно использует память. Python 2 код соответствует:
import itertools
with open("out.csv","wb") as f:
cw = csv.writer(f,delimiter=" ")
cw.writerows(itertools.izip(list1,list2,list3))
Если у вас есть список списков:
list_of_lists = [list1,list2,list3]
вы можете использовать *
расширить список в аргументы для zip
или izip
:
cw.writerows(zip(*lists_of_lists))
cw.writerows(itertools.izip(*lists_of_lists))
Что содержит списки? Смешать строку и числа или любой из них? – MYGz
только плавающие или внутренние номера – Rickson
Проверьте мое решение. И не забудьте сообщить, если вы найдете еще более быстрый. – MYGz