首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >插入项的均分保留索引

插入项的均分保留索引
EN

Stack Overflow用户
提问于 2016-06-27 19:16:19
回答 1查看 269关注 0票数 0

在插入数字时,我使用二分模块来保持列表的排序。假设我将在这个顺序中插入三个数字9, 2, 5。这个列表的最后一个状态显然是[2, 5, 9],但是,我是否有可能找到将数字插入到这个列表中的索引列表。对于这个列表,它将是[1, 2, 0]。所以我需要的列表是排序发生后的索引0,1,2,这是在每次插入时发生的,这就是为什么我找不到一种方法。我可以根据key函数的sorted特性对其进行排序,但是我不想增加复杂性。那么,我的问题是,这是可以实现的二分模块吗?

这是我使用的代码,

代码语言:javascript
运行
复制
import bisect

lst = []

bisect.insort(lst, 9)
bisect.insort(lst, 2)
bisect.insort(lst, 5)

print lst

编辑:另一个例子是,我要将数字4、7、1、2、9插入到某个空列表中。(让我们先假设没有二分,我已经有了列表中的数字)

代码语言:javascript
运行
复制
[4, 7, 1, 2, 9]
# indexes [0, 1, 2, 3, 4], typical enumeration

分拣后,

代码语言:javascript
运行
复制
[1, 2, 4, 7, 9]
# now the index list [2, 3, 0, 1, 4]

它能在不增加复杂性的情况下用平分的方法来完成吗?

注:插入的顺序不是任意的。众所周知,这就是为什么我尝试使用带二分的索引。

EN

回答 1

Stack Overflow用户

发布于 2016-06-27 21:02:50

insort不知道按什么顺序插入项目。你得自己加上这个逻辑。这样做的一种方法可以是插入由值和索引组成的二元组:

代码语言:javascript
运行
复制
bisect.insort(lst, (9, 0))
bisect.insort(lst, (2, 1))
bisect.insort(lst, (5, 2))

在添加对象时,您需要自己跟踪索引,但由于序列首先按第一项排序,然后按下一项排序,所以这将仍然是正确排序的,而无需付出任何额外的努力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38061553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档