2013-11-13 3 views
0

У меня есть следующий класс:Возвращает объект с переменным значением макс экземпляра

class Node(object): 
def __init__(self, id): 
    self.stat = 1 
    self.children = set() 
    self.id= = id 

Там есть список, который содержит экземпляры этого класса

list = [instance_0, instance_1, instance_2] 

Я хочу, чтобы мой код, чтобы вернуть объект который имеет самое высокое значение в своем self.stat переменной

Как это сделать?

ответ

1

Во-первых, я бы предложил не использовать list в качестве имени переменной ... Назовем его mylist.

Так у вас есть:

mylist = [ instance_0, instance_1, instance_2 ] 

Тогда это должно дать вам stat переменные в другом списке:

objstats = [ x.stat for x in mylist ] 

Затем вы можете применить max() найти самый большой и index() найти какую позицию он находится в:

maxindex = objstats.index(max(objstats)) 

А затем u себе, что индекс, чтобы найти исходный объект:

largest = mylist[maxindex] 

Конечно, вы можете объединить две последние строки:

largest = mylist[objstats.index(max(objstats))] 

Технически, вы могли бы объединить все это в одну строку, но так как вы ссылаетесь objstats дважды, более эффективно хранить его, чем вычислять его дважды.

+0

спасибо за внимание. Конечно, 'list' является внутренним ключевым словом, поэтому использование не будет разумным. Также большое спасибо за остальную часть ответа, особенно за то, что он комментирует, что делает каждый шаг. Это очень помогает для начинающих программистов вроде меня :) –

+0

Интересно, что я получаю тот же результат, когда запускаю 'max (mylist)', однако не уверен, насколько это правильно –

+0

@WolfgangKuehne Мне нужно немного поработать, чтобы убедиться , но я подозреваю, что когда вы делаете 'max (mylist)', он выполняет 'max()' для первого элемента, добавленного к каждому «Узлу», который удобно вам в этом случае - если вы хотите 'max()' над другим членом, вам придется использовать другой подход (например, выше). Также не уверен, что это намеренное поведение (т. Е. 'Max()' требуется для этого так?) Или удачный побочный эффект ... – twalberg

Смежные вопросы