【问题标题】:Python - sort lists based on their sumPython - 根据总和对列表进行排序
【发布时间】:2013-11-09 05:00:51
【问题描述】:

我想根据每个内部列表的总和对包含列表的列表进行排序。

这是我当前的 sn-p

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)的结果从低到高对向量进行排序。最好的方法是什么?

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

    您可以在 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) 就地完成。
    • 问题是sum实际上不是sum(data),而是sum(function(data))。我当时就卡住了。
    • 对,findbest是函数(数据)
    • @user2733911 这对你不起作用? print sorted([findbest(vector) for vector in vectors], key=sum)
    • 不,因为我想要对向量数组进行排序,而不是 findbest(vector) 的数组。但我意识到我对这个程序的意识形态存在巨大缺陷,这个问题被消除了。
    【解决方案2】:
    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)
    

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 1970-01-01
      • 2017-07-09
      • 2013-12-01
      • 2021-06-27
      • 1970-01-01
      • 2018-07-08
      • 2020-07-02
      相关资源
      最近更新 更多