Добавление элемента в тот же индекс

#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 Смотрите мой обновленный ответ.