【问题标题】:Average of last 6 elements from given element in list列表中给定元素的最后 6 个元素的平均值
【发布时间】:2018-12-07 02:13:15
【问题描述】:

我有list=[307, 258, 164, 193, 174, 285, 230, 160, 257, 306, 173, 169, 192, 209, 110]

我想计算列表中给定元素 [n] 的平均最后 6 个元素,然后 n 应该迭代 1[n+1] 并且应该再次执行相同的操作。

L3[-15:] 我知道如何访问 d 列表中的最后几个元素。 new_list = my_list[(len(my_list) - 10):] .我怎样才能使用双端队列

请帮忙,谢谢

【问题讨论】:

  • 如果您已经有一个列表并且您没有添加或删除任何内容,为什么还要为此使用双端队列?
  • 不,我不会删除。那么llist怎么做呢?
  • sum(lst[-6:])/6?我不确定我是否理解这个问题
  • 我的意思是假设我有列表中的第 8 个元素,然后它将从列表中的该元素中获取最后 6 个元素的平均值并迭代 (8+1) 并再次找到最后 6 个元素的平均值.
  • 我认为你最好使用 Julien Spronck 给出的答案,它既不使用熊猫也不使用双端队列,直到你更好地理解这两者的作用。据我所知,它提供了您想要的输出。

标签: python list pandas deque


【解决方案1】:

您可以为此使用 collections.deque,以同时保存 6 个元素并找到双端队列的平均值

from collections import deque
lst = [307, 258, 164, 193, 174, 285, 230, 160, 257, 306, 173, 169, 192, 209, 110]
n = 6
d = deque(maxlen=n)

[d.append(e) or sum(d)/float(n) for e in lst][n-1:]
# [230.16666666666666, 217.33333333333334, 201.0, 216.5, 235.33333333333334, 235.16666666666666, 215.83333333333334, 209.5, 217.66666666666666, 193.16666666666666]

【讨论】:

  • 是的,所有解决方案都在工作。非常感谢
【解决方案2】:

我认为使用Julien Spronck 解决方案更好,但如果想使用pandas 解决方案是rollingmean

out = pd.Series(mylist).rolling(6).mean().dropna().tolist()
print (out)

[230.16666666666666, 217.33333333333334, 
 201.0, 216.5, 
 235.33333333333334, 235.16666666666666, 
 215.83333333333334, 209.5, 
 217.66666666666666, 193.16666666666666]

【讨论】:

    【解决方案3】:

    我不确定你在问什么,但也许你正在寻找一个滚动平均值。在这种情况下,我使用列表推导来创建滚动平均值:

    mylist = [307, 258, 164, 193, 174, 285, 230, 160, 257, 306, 173, 169, 192, 209, 110]
    rolling_avg = [mylist[j-6:j]/6 for j in range(6, len(mylist))]
    # [230.16666666666666,
    #  217.33333333333334,
    #  201.0,
    #  216.5,
    #  235.33333333333334,
    #  235.16666666666666,
    #  215.83333333333334,
    #  209.5,
    #  217.66666666666666]
    

    rolling_avg 中的第一个数字是 mylist 中六个第一个数字的平均值,第二个数字是索引 1 到 6 的数字的平均值,...

    【讨论】:

      猜你喜欢
      • 2013-07-22
      • 2020-07-12
      • 2021-09-30
      • 1970-01-01
      • 2011-11-30
      • 2017-06-11
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多