Python - 根据列表的和对其进行排序

5

我想对包含列表的列表进行排序,基于每个内部列表的总和。

这是我目前的代码片段:

vectors = []
for i in range(0, 10):
    vectors.append(generate_vector()) # generate_vector() works, creates a list

for vector in vectors:
    coin_list = findbest(vector) # findbest(vector) outputs a list
    print coin_list, fitness(coin_list) # fitness(coin_list) gives the sum of coin_list

我希望能根据健康度测试(coin_list)的结果从低到高对向量进行排序。最好的方法是什么?

2个回答

11
你可以在sorted函数中使用key参数。
data = [[1,2,3], [14, 7], [5, 6, 1]]
print sorted(data, key=sum)

输出

[[1, 2, 3], [5, 6, 1], [14, 7]]

如果您想原地排序

data = [[1,2,3], [14, 7], [5, 6, 1]]
data.sort(key=sum)
print data

输出

[[1, 2, 3], [5, 6, 1], [14, 7]]

编辑 如果你想知道如何按照降序排序,你可以使用 reverse 参数,像这样:

data.sort(key=sum, reverse=True)
sorted(data, key=sum, reverse=True)

那么,在你的情况下

vectors = [generate_vector() for i in range(0, 10)]
print sorted([findbest(vector) for vector in vectors], key=sum)

就是这样。


或者使用 data.sort(key=sum) 来原地排序。 - mgilson
问题在于总和不是实际的sum(data),而是sum(function(data))。我卡在那一点了。 - user2733911
正确的,findbest是一个函数(data)。 - user2733911
@user2733911 这个对你不起作用吗?print sorted([findbest(vector) for vector in vectors], key=sum) - thefourtheye
不是因为我想要向量数组排序,而不是findbest(vector)数组排序。但我意识到我的编程思想中存在一个巨大的缺陷,这个问题已经被消除了。 - user2733911
显示剩余2条评论

3
vectors = []
for i in range(0, 10):
    vectors.append(generate_vector()) # generate_vector() works, creates a list

for vector in vectors:
    coin_list = findbest(vector) # findbest(vector) outputs a list
    print sorted(fitness(coin_list), key=sum)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接