如果这个问题已经在其他地方得到回答,我们深表歉意;我试过搜索,但没有找到任何能回答我问题的东西(或者我有,但不明白)...
我是 Python (v2.6.2) 的新手,有一个包含浮点值的列表列表,看起来像下面这样(除了完整的东西每个列表有 2+ 百万个条目):
cat = [[152.123, 150.456, 151.789, ...], [4.123, 3.456, 1.789, ...], [20.123, 22.456, 21.789, ...]]
现在我想做的是按照第 3 个列表的元素的升序对所有 3 个列表进行排序,这样我得到:
cat_sorted = [[152.123, 151.789, 150.456, ...], [4.123, 1.789, 3.456, ...], [20.123, 21.789, 22.456, ...]]
我已经尝试了一些东西,但它们并没有给我我正在寻找的东西(或者我可能没有正确使用它们)。有没有办法做我正在寻找的东西,如果是这样,什么是最简单和最快的(考虑到我有 3 x 200 万个条目)?有没有一种方法可以使用另一个列表对一个列表进行排序?
最佳答案
这会很痛苦,但是使用默认的 python 你有 2 个选择:
用
enumerate()
修饰第一个和第二个列表,然后使用索引对它们进行排序以引用第三个列表中的值:cat_sorted = [ [e for i, e in sorted(enumerate(cat[0]), key=lambda p: cat[2][p[0]])], [e for i, e in sorted(enumerate(cat[1]), key=lambda p: cat[2][p[0]])], sorted(cat[2]) ]
虽然它可能有助于就地排序
cat[2]
而不是使用sorted()
;你不能绕过对其他两个使用sorted()
。zip()
将三个列表放在一起,然后对这个新列表列表的第三个元素进行排序,然后再次zip()
返回原始结构:from operator import itemgetter cat_sorted = zip(*sorted(zip(*cat), key=itemgetter(2)))
两者都不会成为性能破坏者,如果使用包含数百万个数字的普通 Python 列表。
关于Python - 对列表列表中的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161827/