【问题标题】:Appending item on same index在同一索引上附加项目
【发布时间】:2021-12-12 03:53:31
【问题描述】:

我有这些索引:[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,那么为什么Item("steak", 1) 没有在结果中重复?
  • 如果你能清楚地解释它是如何工作的,你可能会编写代码来做到这一点。

标签: python list algorithm


【解决方案1】:

以下建立一个优先级队列,其中“索引”表示每个项目的优先级:

>>> indices = [3, 1, 1, 2]
>>> items = [("beer", 4), ("steak", 1), ("hamburger", 1), ("donut", 3)]
>>> from bisect import bisect_left
>>> prio = []
>>> new = []
>>> for i, item in zip(indices, items):
...     index = bisect_left(prio, i)
...     prio.insert(index, i)
...     new.insert(index, item)
... 
>>> new
[('hamburger', 1), ('steak', 1), ('donut', 3), ('beer', 4)]

【讨论】:

  • [3, 1, 1, 2] 列表在哪里使用?
  • 是的,但是因为汉堡包在牛排之后,所以它需要在之前,因为它又有 1 个索引但更新了
  • 我认为输出示例中 steak 之前的 hamburger 是一个错误,因为应该首先插入 steak
  • 是的,但这是正确的答案,其他测试用例使用相同的逻辑
  • @ToklCz 查看我的更新答案。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
相关资源
最近更新 更多