首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python计算列表中x对象属性的和。

Python计算列表中x对象属性的和。
EN

Stack Overflow用户
提问于 2022-04-08 12:25:31
回答 2查看 28关注 0票数 0

我有个问题。我正在努力计算烛台清单上的移动平均值。为了做到这一点,我有这样的想法:

代码语言:javascript
复制
def calculate(ma, candlesticks):
    
    maData = []
    
    i = 0
    while i < len(candlesticks) - ma + 1:

        # Calculate the average of current window
        movingAverage = round(np.sum(candlesticks[i:i+ma]) / ma, 2)
        
        # Store the moving average
        maData.append(movingAverage)
        
        # Shift window to right by one position
        i += 1
  
    return maData

我遇到的问题是烛台列表包含有属性的对象。我需要计算关口上的移动平均值,所以我想我使用:

代码语言:javascript
复制
movingAverage = round(np.sum(candlesticks[i:i+ma].close) / ma, 2)

但是蟒蛇说:

代码语言:javascript
复制
AttributeError: 'list' object has no attribute 'close'

当我打印candlesticks[i:i+ma]时,这个循环的第一轮给出了以下结果

代码语言:javascript
复制
[{'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1577836800000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 41.29, 'high': 42.08, 'low': 41.16, 'close': 41.16, 'volume': 110044.87445}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1577923200000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 41.58, 'high': 41.74, 'low': 39.17, 'close': 39.17, 'volume': 194486.2157}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578009600000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 39.44, 'high': 42.39, 'low': 38.77, 'close': 38.77, 'volume': 426771.00676}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578096000000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 42.23, 'high': 42.9, 'low': 41.77, 'close': 41.77, 'volume': 248814.62818}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578182400000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 42.79, 'high': 44.61, 'low': 42.6, 'close': 42.6, 'volume': 291964.84958}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578268800000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 43.29, 'high': 46.08, 'low': 43.16, 'close': 43.16, 'volume': 384930.9909}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578355200000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 45.8, 'high': 47.03, 'low': 44.48, 'close': 44.48, 'volume': 493847.10532}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578441600000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 46.3, 'high': 48.54, 'low': 44, 'close': 44, 'volume': 628050.68438}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578528000000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 45.35, 'high': 45.79, 'low': 43.9, 'close': 43.9, 'volume': 296221.65692}, {'dateTimeChanged': '2022-04-01T21:40:59.000Z', 'openTime': 1578614400000, 'symbol': 'LTCUSDT', 'interval': '1d', 'open': 44.75, 'high': 49.72, 'low': 43.71, 'close': 43.71, 'volume': 729803.12291}]

如何使用烛台列表的属性结束来计算移动的avearge?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-08 12:29:34

您不能只访问列表中的.close,您需要对各个元素进行访问。而不是

代码语言:javascript
复制
candlesticks[i:i+ma].close

代码语言:javascript
复制
[candle.close for candle in candlesticks[i:i+ma]]
票数 0
EN

Stack Overflow用户

发布于 2022-04-08 12:31:53

问题是candlesticks[i:i+ma]ma元素的数组,这就是为什么不能访问close属性的原因。相反,你能做的是

代码语言:javascript
复制
s = sum(candlesticks[i + j].close for j in range(ma))
movingAverage = round(s / ma, 2)

这样做的好处是,将迭代器传递给sum函数,这样就不会创建额外的列表来执行添加操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71796968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档