Измените понимание списка на генератор, чтобы предотвратить ошибку памяти - PullRequest
0 голосов
/ 30 ноября 2018

Что у меня есть:

Фрейм данных как следующий

         I.D         Score
1         11          26
3         12          26
5         13          26
6         14          25

умножить миллион строк ....

Что я пытаюсь сделать :

1) Передать оба столбца в функцию с именем Points и создать список с именем players.кредиты @jezrael

players = [Points(int(a),b) for a, b in zip(score['I.D'],score['Score'])]

2) Передать список другой базовой функции, которая просто загружает весь список

upload_to_scoreboard(players)

Что я получаю

MemoryError  

Я считаю, что передача целого списка, состоящего из миллионов строк, следующей функции приводит к нехватке памяти.Как я могу изменить код для передачи списка в upload_to_scoreboard, не вызывая ошибки памяти?

1 Ответ

0 голосов
/ 30 ноября 2018

Используйте генератор вместо списка.

Для этого замените [] на (), чтобы окружить ваше понимание списка.

players = [Points(int(a),b) for a, b in zip(score['I.D'],score['Score'])] загружает весь список в память.Чтобы избежать этого, вы можете использовать генератор.Генераторы являются своего рода списком, но с той разницей, что каждый элемент вычисляется и загружается в память только тогда, когда он повторяется, и он выгружается, когда вы его больше не используете.Однако в вашем случае функция upload_to_score_board должна принимать такую ​​структуру данных и не использовать специфику списка.

Чтобы узнать больше о генераторах по сравнению со списком, прочитайте это: https://medium.freecodecamp.org/python-list-comprehensions-vs-generator-expressions-cef70ccb49db#741d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...