自动化问题

2024-09-28 01:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有不同的格言:

    p1 = {'pair1': ([2, 3, 4], [5, 6, 7])}
    p2 = {'pair2': ([9, 10, 11], [12, 13, 14])}
    p3 = {'pair3': ([12, 20, 30], [17, 8, 30])}

我想计算(与保存的结果):

    p1['mean']=np.mean(p1['pair1']) 
    print p1
    {'pair1': ([2, 3, 4], [5, 6, 7]), 'mean': 4.5}

我想定义一个函数,它计算每个pair1,pair2,pair3,pair4的平均值并保存结果。你知道吗

得到结果并不难,我想把结果保存在每一篇文章里。。试了好几个小时都没用


Tags: 函数定义np文章mean平均值printp2
2条回答

当前编写的问题是,函数无法知道键名pair1,因为每个字典的键名不同。你知道吗

您可以对每个字典使用一致的键名,如pair

p1 = {'pair': ([2, 3, 4], [5, 6, 7])}
p2 = {'pair': ([9, 10, 11], [12, 13, 14])}
p3 = {'pair': ([12, 20, 30], [17, 8, 30])}

def find_and_set_mean(a_dictionary):
    a_dictionary['mean']=np.mean(a_dictionary['pair']) 

find_and_set_mean(p1)
find_and_set_mean(p2)
find_and_set_mean(p3)

它给出:

{'pair': ([2, 3, 4], [5, 6, 7]), 'mean': 4.5}
{'pair': ([9, 10, 11], [12, 13, 14]), 'mean': 11.5}
{'pair': ([12, 20, 30], [17, 8, 30]), 'mean': 19.5}

但更好的解决方案可能是将其组织为对象:

class PairObject(object):

    def __init__(self, _part1, _part2):
        self.part1 = _part1
        self.part2 = _part2

    def pair(self):
        return (self.part1, self.part2)

    def mean(self):
        return np.mean((self.part1, self.part2)) 

# Then use it like this:    
p1 = PairObject([2, 3, 4], [5, 6, 7])
p1.pair() # returns ([2, 3, 4], [5, 6, 7])
p1.mean() # returns 4.5

我想详细介绍一下Justin的OO解决方案:

def mean (self)的问题是每次访问它时都会重新计算它。您可能希望将此属性设置为惰性,即在首次访问时计算它,并将其存储以供将来参考。你知道吗

像这样:

class PairObject:
    def __init__(self, part1, part2):
        self._pair = (part1, part2)
        self._mean = None

    @property
    def pair(self):
        return self._pair

    @property
    def mean(self):
        if self._mean == None: self._mean = np.mean(self._pair)
        #explicit test for None, as e.g. a mean of 0 also is falsy
        return self._mean

# Then use it like this:    
pairs = [PairObject ([2, 3, 4], [5, 6, 7]),
    PairObject ([9, 10, 11], [12, 13, 14]),
    PairObject ([12, 20, 30], [17, 8, 30]) ]

for p in pairs:
    print p.pair
    print p.mean

相关问题 更多 >

    热门问题