Эффективное использование памяти и самый быстрый способ создания пакетов и применения fuction к списку python - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно создать пакет из 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 Ответ

1 голос
/ 22 апреля 2020

Если у вас проблемы с памятью, вы можете попытаться сохранить все как итератор до самого последнего момента. Затем вы можете перебирать каждый элемент по одному или вызывать 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)}
...