【发布时间】:2021-11-03 02:15:46
【问题描述】:
假设我有一个列表 A,当我插入元组 B 时,我得到了列表 C。 列表 A 是基于每个元组的第三个数字的排序列表
简而言之:如何将这个元组插入到列表 A 中,同时保持列表根据第三个值排序。
INSERT TO NOT SORT 这不是同一个问题 How to sort a list/tuple of lists/tuples by the element at a given index?
因为对列表进行排序实在是太慢了。
A = [(1, 2, 1),(1, 2, 2),(1, 2, 3),(1, 2, 5)]
insert --> B: (1, 2, 4)
C = [(1, 2, 1),(1, 2, 2),(1, 2, 3),(1, 2, 4),(1, 2, 5)]
【问题讨论】:
-
我不知道是谁删除了我的问题,但这不是同一个问题。 stackoverflow.com/questions/3121979/…
-
哦。嗯,有stackoverflow.com/questions/27672494/…。不幸的是,标准库不支持这一点。但是请记住,即使您可以比这更快地找到插入点,插入
list也是 O(N)。以这种方式迭代构建列表将是 O(N^2),而一次放入所有内容并排序一次是 O(N lg N)。如果您需要有效地进行重复更新,则需要一种不同的数据结构,您必须自己创建或从第三方库获取。 -
另外,如果你确实想插入到排序位置而不是“在末尾添加”+“排序后”方法,那么实现一个Binary Tree,其中
val是你的元组.或者将元组存储为 val 并维护一个单独的“键”,该键始终分配给元组的第三项。但是,您需要实现自己的to_list()方法(或覆盖__iter__并执行list(tree))以获得树的列表版本。为什么排序很慢?为什么重复插入+排序优于所有插入和一种排序?显示到目前为止您尝试过的内容(代码)
标签: python list sorting insert tuples