В настоящее время я получаю память всякий раз, когда запускаю свой код. Вот часть моего кода, которая вызывает проблему. Строка clear_nodes.append(i+(grid_size*4)) - это та, которая дает ошибку памяти, и я не уверен, как от нее избавиться. Спасибо
blocked_rows = []
for num in range(grid_size, 2*grid_size):
blocked_rows.append(num)
blocked_rows.append(num+(grid_size*2))
blocked_rows.append(num+2*(grid_size*2))
blocked_rows.append(num+3*(grid_size*2))
blocked_rows.append(num+4*(grid_size*2))
blocked_rows.sort()
clear_nodes = []
for i in blocked_rows:
if i == (grid_size*2)-1:
clear_nodes.append(i)
if i == (grid_size*3):
clear_nodes.append(i)
for i in clear_nodes:
clear_nodes.append(i+(grid_size*4))
#clear_nodes.append(i+(grid_size*8))
for i in clear_nodes:
if i < (grid_size * grid_size):
all_blocked.append(i)
Это кажется сложностью N * N * N из-за трех вложенных «для»; Я думаю, вы должны реорганизовать свой код
Вы должны опубликовать точное сообщение об ошибке, которое выдает ваш код, это даст нам много подсказок.
Спасибо Джейсон :) отличная помощь
Более элегантный способ получить то, что вы хотите, с помощью цикла: clear_nodes.extend(i + grid_size * 4 for i in clear_nodes).






for i in clear_nodes: clear_nodes.append(...)— это бесконечный цикл — вы добавляете элементы в список, который перебираете. Если вы хотите перебрать только те элементы, которые уже присутствовали, вам нужно использовать копию списка:for i in clear_nodes[:]:.