创建批处理并将函数应用于python列表的内存高效且最快的方法
Posted
技术标签:
【中文标题】创建批处理并将函数应用于python列表的内存高效且最快的方法【英文标题】:Memory efficient and fastest way to create batchs and applying fuction to python list 【发布时间】:2020-08-06 00:09:12 【问题描述】:我需要创建 5 个批次并在内存效率和列表的每个值上应用函数 最快的方式。我需要避免两个步骤来进行批处理。我需要以最有效和最快的方式一步完成。请帮助以有效的方式进行操作。
示例代码:
import json
from uuid import uuid4
rows = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
rowlist = [r*r for r in rows]
records = ['Data': json.dumps(rowlist[i:i + 5]), 'PartitionKey': str(uuid4()) for i in range(0, len(rowlist), 5)]
print(records)
结果:
['Data': '[1, 4, 9, 16, 25]', 'PartitionKey': '73ba1cba-248c-4b26-982e-1d902627bfe6', 'Data': '[36, 49, 64, 81, 100]', 'PartitionKey': '02a986bf-0495-4620-a3d4-0f0b91cd24d6', 'Data': '[121, 144, 169, 196, 225]', 'PartitionKey': 'a0ef674e-95f3-4cb0-8e0b-ad052f7726bf']
【问题讨论】:
那么...您所说的最有效和最快的方式是什么意思?你想达到什么目的?是什么让它变慢?您希望我们如何进一步优化它? 根据列表的大小,批处理需要更多时间(批处理应该更快),创建批处理应该更快,并且由于列表的大小,我正在解决内存问题正在解析。我也想避免这个问题。 【参考方案1】:如果您遇到内存问题,您可以尝试将所有内容作为迭代器进行维护,直到最后一刻。然后您可以一次遍历每个项目,或者如果您想尝试制作最终列表,请致电list(records)
:
(我去掉了json和uuid让结构更清晰):
rows = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
sqr = lambda r: r*r
records = ('Data': group for group in zip(*[map(sqr,rows)] * 5))
for record in records:
print(record)
打印:
'Data': (1, 4, 9, 16, 25)
'Data': (36, 49, 64, 81, 100)
'Data': (121, 144, 169, 196, 225)
【讨论】:
感谢您的回复。有没有办法根据大小进行批处理。我必须批量制作 1 MB 大小(我一次可以写入的大小有限制) @basic 我不确定计算对象大小的最佳方法。但是,如果您发现了这一点,您可以使用itertools.islice
一次迭代生成器一个块。以上是关于创建批处理并将函数应用于python列表的内存高效且最快的方法的主要内容,如果未能解决你的问题,请参考以下文章