简介
来自这个问题
Python- creating object instances in a loop with independent handling
如果您已创建实例列表,我问自己如何访问所有属性而不仅仅是单个实例。
最小示例
考虑使用属性name和value创建公司实例列表。现在我想知道,哪些公司确实具有最高价值。
到目前为止,我只是将value属性的值存储在数组中,然后找到最大值的索引。
import numpy as np
class Company(object):
def __init__(self, name, value):
self.name = name
self.value = value
companies = []
for name in 'ABC':
companies.append(Company(name, np.random.rand()))
l = len(companies)
liste = np.zeros(l)
for i in range(l):
liste[i] = companies[i].value
ind = np.unravel_index(np.argmax(liste), liste.shape)
print("Highest value: ", liste[ind])
print("Company of highest value: ", companies[ind[0]].name)
问题
1)在没有for循环的情况下,是否有不同的方法来创建所有属性值的列表?
2)是否有直接的方法在列表中查找实例,某个属性的值是否为最大值?
答案 0 :(得分:0)
您可以在初始化对象时比较/存储全局变量中的值,而不是将所有对象存储在全局列表中并迭代它们。
import numpy as np
maxval = []
maxname = []
class Company(object):
def __init__(self,name,value):
self.name=name
self.value=value
if len(maxval)>0 and maxval[0] < value :
maxval[0]=value
elif len(maxval)==0:
maxval.append(value)
答案 1 :(得分:0)
它并没有完全避免for
,而是将其替换为列表理解:
from operator import attrgetter
max_val_company = max((c for c in companies), key=attrgetter('value'))
max_val_company
将包含Company
具有最大value
属性的对象。