Python - sort lists based on their sum

I want to sort a list containing lists based on the sum of each internal list.

here is the current fragment that I have

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

I want to sort vectors based on fitness results (coin_list) from low to high. What is the best way to do this?

+4
source share
2 answers

You can use a parameter keyin a sorted function

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

Exit

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

If you want to sort inplace

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

Exit

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

Edit Just in case, if you are interested in how to sort in descending order, you can use a parameter reverselike this

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

So in your case

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

Here it is.

+10
source
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)
+3

All Articles