如何访问存储在列表中的所有实例的属性?
How to access the attributes of all instances stored in a list?
简介
来自这个问题
Python- creating object instances in a loop with independent handling
我在问自己,如果您创建了一个实例列表,如何访问所有实例的属性而不仅仅是单个实例。
最小示例
考虑创建一个包含属性名称和值的公司实例列表。现在我想知道,这些公司中哪家的价值最高。
到目前为止,我只是将 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) 有没有一种直接的方法可以在列表中找到某个属性的值最大的实例?
您可以在初始化对象时 compare/store 全局变量中的值,而不是将所有对象存储在全局列表中并对其进行迭代。
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)
它并没有完全避免for
而是用列表推导代替它:
from operator import attrgetter
max_val_company = max((c for c in companies), key=attrgetter('value'))
max_val_company
将包含 Company
具有最大 value
属性的对象。
简介
来自这个问题
Python- creating object instances in a loop with independent handling
我在问自己,如果您创建了一个实例列表,如何访问所有实例的属性而不仅仅是单个实例。
最小示例
考虑创建一个包含属性名称和值的公司实例列表。现在我想知道,这些公司中哪家的价值最高。
到目前为止,我只是将 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) 有没有一种直接的方法可以在列表中找到某个属性的值最大的实例?
您可以在初始化对象时 compare/store 全局变量中的值,而不是将所有对象存储在全局列表中并对其进行迭代。
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)
它并没有完全避免for
而是用列表推导代替它:
from operator import attrgetter
max_val_company = max((c for c in companies), key=attrgetter('value'))
max_val_company
将包含 Company
具有最大 value
属性的对象。