@arshajii 打了我一拳,他的回答很好。但是,如果您更喜欢就地排序:
>>> pop = [[1,5,3],[1,1,1],[7,5,8],[2,5,4]]
>>> pop.sort(key=sum)
>>> pop
[[1, 1, 1], [1, 5, 3], [2, 5, 4], [7, 5, 8]]
我必须查找 Python 的排序算法——我认为它叫做 Timsort,我很确定就地排序会减少内存密集型并且速度大致相同。
编辑:根据这个答案,我肯定会推荐x.sort()
如果您想以不那么传统的方式对列表进行排序,您可以编写自己的函数(该函数需要一个参数。)冒着引发激烈战争的风险,我强烈建议不要使用lambda
.
例如,如果您希望第一个数字的权重比第二个数字的权重比第三个数字的权重,等等:
>>> def weightedSum(listToSum):
... ws = 0
... weight = len(listToSum)
... for i in listToSum:
... ws += i * weight
... weight -= 1
... return ws
...
>>> weightedSum([1, 2, 3])
10
>>> 1 * 3 + 2 * 2 + 3 * 1
10
>>> pop
[[1, 5, 3], [1, 1, 1], [7, 5, 8], [2, 5, 4]]
>>> pop.sort(key=weightedSum)
>>> pop
[[1, 1, 1], [1, 5, 3], [2, 5, 4], [7, 5, 8]]
>>> pop += [[1, 3, 8]]
>>> pop.sort(key=weightedSum)
>>> pop
[[1, 1, 1], [1, 5, 3], [1, 3, 8], [2, 5, 4], [7, 5, 8]]