2012-04-23 3 views
0

У меня есть список объектов, и я хочу его отсортировать, но есть одно предостережение.сортировка списка объектов на основе экземпляра, ближайшего к числу python

Так позволяет сказать, что в списке есть объект, который имеет экземпляр с именем нормой

and norms are like [0.1,0.2,0.3.....0.9] 

Так что, если я что-то вроде:

potential_list.sort(key = lambda x:x._norm, reverse = True) 

тогда он будет сортировать его в somethng как

 [0.9, 0.8... 0.1] 

, но я хочу отсортировать его так, чтобы число было таким, чтобы

 number = 0.3 

    then sorted list is [0.4,0.6,0.3,0.7 and so on] because 

     0.4-0.3 = 0.1 
     abs|0.4-0.5| = 0.1 
     0.4 - 0.2 = 0.2 
     abs|0.4 - 0.6| = 0.2 

    So the sort is because of that difference. 

Как это сделать. Не то, что этот [0.4,0.6 ....] является экземпляром любого объекта

Таким образом, ее смесь sorting a list with respect to the closest number in the list python и How to sort a list of objects , based on an attribute of the objects?

+2

Я прочитал это несколько раз, и я до сих пор не получают совсем то, что вы просите. Не могли бы вы показать пример ввода и вывода для второго сортировки? Я не вижу, откуда вы получаете свои значения. –

+0

Я немного смущен тем, как выполняется ожидаемый список сортировки. Не возражаете ли вы исправить пропущенную букву «Я хочу сортировать ее так, чтобы число до этого было таким, что' и что такое 'число = 0,3'? Я довольно медленно при интерпретации чужих проблем ... являются ли '0,4',' 0,6' экземпляром других объектов? или вы говорите, что этот список является атрибутом объекта? – CppLearner

ответ

2

Точно, как вы описали.

key=lambda x: abs(x._norm - number) 
+1

Черт. @Ignacio Вы всегда самый быстрый решатель на SO. Ницца. – CppLearner

+2

Вот как я впервые прочитал вопрос, но потом я усомнился в том, что я основывался на его примере. –

1

Ну, просто объединить их:

>>> class X(object): 
...  def __init__(self, n): self._norm = n 
...  def __repr__(self): return str(self._norm) 
... 
>>> lst = [X(0.1),X(0.2), X(0.3), X(0.4), X(0.5), X(0.6), X(0.7), X(0.8), X(0.9)] 
>>> lst.sort(key=lambda x: abs(x._norm - 0.5)) 
>>> lst 
[0.5, 0.4, 0.6, 0.7, 0.3, 0.2, 0.8, 0.1, 0.9] 
Смежные вопросы