【发布时间】:2012-09-01 17:05:33
【问题描述】:
我正在读取一个文件并在 Python 中提取包含一些字符串和一些数字的数据。我将此信息存储为列表列表,如下所示:
dataList = [
['blah', 2, 3, 4],
['blahs', 6, 7, 8],
['blaher', 10, 11, 12],
]
我想让dataList按子列表的第二个元素排序:dataList[][1]
我想当我想添加它们时可以使用 insort 或 bisect,但我不知道如何让它查看子列表的第二个元素。
这里有什么想法吗?我只是将数据附加到末尾,然后进行线性排序以稍后再查找内容。但是,在这里扔几十个数千个子列表,然后搜索 100k 个项目,这需要一段时间。
【问题讨论】:
-
为什么不能只添加所有内容然后对结果进行排序?在我看来,边走边排序效率会降低......
-
我曾考虑过这一点,但认为在添加项目时保持排序会更有效。也许不是?
-
@ErikS 在 python 列表中间的插入是 O(n)
-
如果您真的希望它在创建时保持排序,请查看code.activestate.com/recipes/577197-sortedcollection
-
你所描述的相当于insertion sort,它的运行时间为O(n^2)。大多数好的排序算法(如merge sort 或quicksort)在O(n log n) 时间内运行。因此,在进行过程中保持排序并不会更有效。
标签: python data-structures multidimensional-array sorting