@Johnem

Как реализовать fifo из списков в python?

Условно имеются два списка buy и sell, как реализовать следующее если разница между первым элементом списка buy и первым элементом sell ,больше нуля то вместо первого элемента списка buy
должна подставлятся эта разность, если разность равна нулю то первый элемент списка buy удаляется, если же разница отрицательна то первый элемент списка buy удаляется а разность прибавляется к следующему элементу этого списка и так далее,
желательно что бы код описывал бесконечное множество таких операций. Вот пример: мы купили несколько яиц несколькими операциями
,это можно записать как [12,23,45,21,31,56,11,1,3,6,8,3,232,5], а потом продали их в несколько операций, это можно записать так [1,35,57,35,25,35],
дак вот нам надо узнать сколько яиц и в каком они порядке остались то есть ответ должен быть [11,1,3,6,8,3,232,5], при этом элементы списка продаж нельзя сумировать, так как там потенциально может находится цена продажи яиц (так же как и в списке с покупками цены покупки)
Я попробывал это реализовать вот что у меня получилось:
Версия кода работающая только если сумма двух первых элементов списка buy < первого элемента списка sell:
if a > 0:
    bue.remove(bue[0])
    bue.insert(0, a)
    print(bue)
elif a == 0:
    bue.remove(bue[0])
    print(bue)
else:
    bue.remove(bue[0])
    print(bue)
    bue.insert(0, bue[0] + a)
    print(bue)
    bue.remove(bue[1])
    print(bue)

Попытка сделать этот код пригодным для условно бесконечных списков:
def fifo(position):
    if a > 0:
        bue.remove(bue[int(position)])
        bue.insert(int(position), a)
        print(bue)
    elif a == 0:
        bue.remove(bue[int(position)])
        print(bue)
    else:
        fifo(int(position) + 1)
fifo(0)
  • Вопрос задан
  • 333 просмотра
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Не используйте такой некорректный способ удаления:
bue.remove(bue[0])
Метод remove удаляет элемент по значению, а не по индексу.
Используйте bue.pop(0) для извлечения первого элемента и, если надо bue.pop(-1) для извлечения последнего. Метод возвращает извлеченный элемент.
FIFO - означает First In First Out - это классическая очередь. Первый вошедший элемент выйдет первым. Своеобразная модель ЖКТ здорового человека. ЖКТ алкоголика - это так называемый Дек, извлекать элементы из которого допустимо с двух сторон. Почему вы тут используете слово FIFO я не понимаю.

Ок. Если по существу.
Вам, очевидно, нужен цикл, который будет повторяться пока у вас не опустошится один из ваших списков. Читайте про оператор while.
На каждой итерации этого цикла вы будете проверять перечисленные вами условия и выполнять указанные действия.

Дерзайте.
Однако мне кажется, что вам еще рано решать такую задачу. Стоит почитать любую книгу про обучение программированию. Не важно даже, чтобы именно на питоне. Или вот есть неплохой онлайн курс за рубль.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы