MemoryError в для цикла Python - PullRequest
       4

MemoryError в для цикла Python

0 голосов
/ 29 сентября 2019

У меня есть скрипт с результатом, должно быть минимальное количество списков в одном списке.У меня есть некоторый список данных, и элементы этого списка должны быть отсортированы: если элемент меньше B, поместите его в список sol и отвлекайте элемент от B, иначе поместите его в следующий список sol списков.Это похоже на проблему с упаковкой мусорного ведра.Но у меня есть MemoryError в этом случае.

B = 60
data = [35,21,40,12,24]
max = [B]
sol = [[]]
temp = []
for item in data:
    for j,free in enumerate(max):
        if free >= item:
            max[j] -= (item)
            sol[j].append(item)
            print(max)
            print(sol)
            break
        else:
            sol.append([item])
            max.append(B-item)

solved = len(sol)
print(solved)
print(sol)

Вывод будет таким:

3 [[35,21], [40,12], [24]]

Ошибка произошла в строке после else :.Я ценю любую помощь или совет.Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2019

Ошибка памяти, когда вашей программе буквально не хватает памяти для использования.

В вашем случае это потому, что вы создали бесконечный цикл, который просто добавляет элементы в sol до тех пор, пока не останется больше места.

Если вы поставите print в верхней части оператора if, как показано в приведенном ниже коде, вы увидите свою проблему в терминале.

B = 60
data = [35,21,40,12,24]
max = [B]
sol = [[]]
temp = []
for item in data:
    for j,free in enumerate(max):
        print(max)
        if free >= item:
            max[j] -= (item)
            sol[j].append(item)
            print(max)
            print(sol)
            break
        else:
            sol.append([item])
            max.append(B-item)

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