【问题标题】:How to access the attributes of all instances stored in a list?如何访问存储在列表中的所有实例的属性?
【发布时间】:2018-05-30 09:11:52
【问题描述】:

简介

来自这个问题

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) 是否有直接的方法可以在列表中找到某个属性的值最大的实例?

【问题讨论】:

    标签: python class oop attributes instances


    【解决方案1】:

    它并没有完全避免for,而是用列表理解代替它:

    from operator import attrgetter
    
    max_val_company = max((c for c in companies), key=attrgetter('value'))
    

    max_val_company 将包含具有最大 value 属性的 Company 对象。

    【讨论】:

      【解决方案2】:

      您可以在初始化对象时比较/存储全局变量中的值,而不是将所有对象存储在全局列表中并对其进行迭代。

      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)
      

      【讨论】:

      • 谢谢。这样我就可以计算出最大值,但是如何获得公司名称?!
      • 您可以以相同的方式存储公司名称,或者使用不同的变量将公司名称保持为最高值,或者将两者作为键值对存储在 dict 中。
      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2023-03-08
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多