Мне не удается получить этот код для сортировки списка объектов с помощью .sort() или sorted(). Что мне здесь не хватает?Нужна помощь в сортировке списка объектов по ключу
P.S. Мой метод solution.distance() может использовать некоторые косметические операции, если у кого есть какие-либо предложения.
Спасибо!
import random
import math
POPULATION_SIZE = 100
data = [[1, 565.0, 575.0],
[2, 25.0, 185.0],
[3, 345.0, 750.0],
[4, 945.0, 685.0],
[5, 845.0, 655.0],
[6, 880.0, 660.0],
[7, 25.0, 230.0],
[8, 525.0, 1000.0],
[9, 580.0, 1175.0],
[10, 650.0, 1130.0]
]
class Solution():
def __init__(self):
self.dna = []
self.randomize()
def randomize(self):
temp = data[:]
while len(temp) > 0:
self.dna.append(temp.pop(random.randint(0,len(temp)-1)))
def distance(self):
total = 0
#There has to be a better way to access two adjacent elements.
for i, points in enumerate(self.dna):
if i < (len(self.dna)-1):
total += math.sqrt((points[1]-self.dna[i+1][1])**2 + (points[2]-self.dna[i+1][2])**2)
else:
total += math.sqrt((points[1]-self.dna[0][1])**2 + (points[2]-self.dna[0][2])**2)
return int(total)
class Population():
def __init__(self):
self.solutions = []
self.generation = 0
#Populate with solutions
self.solutions = [Solution() for i in range(POPULATION_SIZE)]
def __str__(self):
result = ''
#This is the part that is not returning sorted results. I tried sorted() too.
self.solutions.sort(key=lambda solution: solution.distance, reverse=True)
for solution in self.solutions:
result += 'ID: %s - Distance: %s\n' % (id(solution), solution.distance())
return result
if __name__ == '__main__':
p = Population()
print p
Немного больше объяснений того, что вы пытаетесь достичь, было бы полезно. – Wilduck