【发布时间】:2015-12-18 22:56:02
【问题描述】:
我有大量列表,需要根据特定条件删除重复元素:
- 唯一性由列表的第一个元素确定。
- 重复项的删除是通过比较重复列表的第二个元素的值来确定的,即保留具有最低第二个元素的列表。
[[1, 4, 5], [1, 3, 4], [1, 2, 3]]
所有上述列表都被认为是重复的,因为它们的第一个元素是相等的。第三个列表需要保留,因为它的第二个元素是最小的。请注意,列表的实际列表有超过 400 万个元素,是双重排序的,需要保留顺序。
列表首先根据内部列表的第二个元素并以反向(降序)顺序排序,然后是基于第一个元素的正常(升序)顺序:
sorted(sorted(the_list, key=itemgetter(1), reverse=True), key=itemgetter(0))
实际排序中三个重复列表的示例:
[...
[33554432, 50331647, 1695008306],
[33554432, 34603007, 1904606324],
[33554432, 33554687, 2208089473],
...]
目标是为平分搜索准备列表。有人可以向我提供有关如何使用 Python 实现这一点的见解吗?
【问题讨论】:
-
如果第一个和第二个元素相等会发生什么?
-
第一个和第二个元素分别代表一个范围的开始和结束。所有重复项要么是超集,要么是另一个范围的子集。不应该有两个或多个第一个元素相等且第二个元素相等的重复项。有一些单独的子列表具有相同的第一个和第二个元素,但即表示范围为 1,但它们从不会出现两次,因为特定范围始终是唯一的。
标签: python