gpt4 book ai didi

python - 将大量 Python 列表的数据导出到文本文件的最快方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:44 24 4
gpt4 key购买 nike

我正在寻找最高效的方法来导出最多 10 个 Python 列表的元素 [x1, x2, x3, ... xn], [y1, y2, y3, ... yn], [z1, z2, z3, ... zn], ... 到结构如下的文本文件:

x1 y1 z1  .  .  . 
x2 y2 z2 . . .
x3 y3 z3 . . .
. . . . . .
. . . . . .
. . . . . .
xn yn zn . . .

具有挑战性的是每个列表可能有多达 100 万个元素(仅 float 或 int 数字)

非常感谢任何建议。

最佳答案

使用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)

在我的机器上 2 秒内写入 100 行 100000 个元素(生成列表比写回它们慢)

因此,您仅受输入列表的内存限制。

编辑:上面的这段代码没有正确地“转置”,所以它是作弊的。使用 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]

您可以使用 * 将列表扩展为 zipizip 的参数:

cw.writerows(zip(*lists_of_lists))

cw.writerows(itertools.izip(*lists_of_lists))

关于python - 将大量 Python 列表的数据导出到文本文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com