#python #list #algorithm
Вопрос:
У меня есть эти индексы: [3,1,1,2], и мне нужно добавить эти элементы:
[Item("beer", 4), Item("steak", 1), Item("hamburger", 1), Item("donut", 3)]
перечислять, быть похожим в этом конкретном порядке
[ Item("hamburger", 1),Item("steak", 1), Item("donut", 3),Item("beer", 4)]
Я делаю это на python, я пробовал это многими способами, но ни один из них не работал должным образом
Комментарии:
1. Я не понимаю вопроса. Как список индексов связан с этим результатом?
2. Индексы для каждого элемента в списке, где он должен быть помещен в новый список
3. Таким образом, это в основном очередь приоритетов, где «индексы» указывают приоритет?
4. У вас дважды есть индекс 1, так почему он не
Item("steak", 1)
дублируется в результате?5. Если бы вы могли четко объяснить, как это работает, вы, вероятно, могли бы написать код для этого.
Ответ №1:
Далее строится очередь приоритетов, где «индексы» указывают приоритет каждого элемента:
gt;gt;gt; indices = [3, 1, 1, 2] gt;gt;gt; items = [("beer", 4), ("steak", 1), ("hamburger", 1), ("donut", 3)] gt;gt;gt; from bisect import bisect_left gt;gt;gt; prio = [] gt;gt;gt; new = [] gt;gt;gt; for i, item in zip(indices, items): ... index = bisect_left(prio, i) ... prio.insert(index, i) ... new.insert(index, item) ... gt;gt;gt; new [('hamburger', 1), ('steak', 1), ('donut', 3), ('beer', 4)]
Комментарии:
1. Где используется этот
[3, 1, 1, 2]
список?2. Да, но поскольку гамбургер после стейка, он должен быть раньше, так как у него снова 1 индекс, но новее
3. Я думаю
hamburger
, что предыдущееsteak
в примере вывода является ошибкой, потомуsteak
что оно должно было быть вставлено первым.4. Да, но это правильный ответ, и в других тестовых случаях используется та же логика
5. @ToklCz Смотрите мой обновленный ответ.