首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python列表中的第7个元素之后插入前7个元素的总和

在python列表中的第7个元素之后插入前7个元素的总和
EN

Stack Overflow用户
提问于 2017-04-22 07:11:37
回答 4查看 152关注 0票数 0

我想在第7个元素之后插入前7个元素的总和,在另一个7个元素之后插入下7个元素的总和,就像wise一样。

代码语言:javascript
复制
a1_tr = [21.1, 10.5, 6.31, 21.1, 6.31, 6.3, 10.4, 17.1, 7.61, 17.2, 7.6, 15.4, 8.54, 8.53, 21.1, 9.47, 7.01, 9.47, 7.01, 6.98, 21.1, 8.34, 16.7, 16.7, 8.34, 15.3, 8.28, 8.39, 9.83, 20.4, 6.77, 6.78, 21.8, 9.69, 6.78, 7.73, 16.7, 8.33, 8.34, 7.74, 16.7, 16.7, 8.2, 16.5, 8.23, 16.4, 8.18, 8.2, 16.5, 21.1, 21.1, 21.1, 21.1, 21.1, 21.1, 21.1]
len(a1_tr) = 56

我想在这个列表中添加8个元素,这样长度就是64。

这是上面列表中的7个元素之和的元素列表:

代码语言:javascript
复制
trsumlist = [82.02000000000001, 81.97999999999999, 82.13999999999999, 82.05, 82.05, 82.24, 82.21, 147.7]

这是我尝试过的:

代码语言:javascript
复制
i = 1
x = 0
>>> while i <= len(a1_tr):
     a1_tr.insert(i, trsumlist[x])
     x = x+1
     i += 8

>>> a1_tr
[21.1, 10.5, 6.31, 21.1, 6.31, 6.3, 10.4, 17.1, 7.61, 17.2, 7.6, 15.4, 8.54, 8.53, 21.1, 9.47, 7.01, 9.47, 7.01, 6.98, 21.1, 8.34, 16.7, 16.7, 8.34, 15.3, 8.28, 8.39, 9.83, 20.4, 6.77, 6.78, 21.8, 9.69, 6.78, 7.73, 16.7, 8.33, 8.34, 7.74, 16.7, 16.7, 8.2, 16.5, 8.23, 16.4, 8.18, 8.2, 16.5, 21.1, 21.1, 21.1, 21.1, 21.1, 21.1, 21.1]

>>> len(a1_tr)
56

这不是在第7个元素之后插入任何元素,有人能建议我一些其他的方法来实现这一点吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-22 07:25:31

最明显的方法就是遍历列表,并保存一个运行的总数。然后,在每个第七个元素之后,添加总数。

代码语言:javascript
复制
a1_tr = [21.1, 10.5, 6.31, 21.1, 6.31, 6.3, 10.4, 17.1, 7.61, 17.2, 7.6, 15.4, 8.54, 8.53, 21.1, 9.47, 7.01, 9.47,
         7.01, 6.98, 21.1, 8.34, 16.7, 16.7, 8.34, 15.3, 8.28, 8.39, 9.83, 20.4, 6.77, 6.78, 21.8, 9.69, 6.78, 7.73,
         16.7, 8.33, 8.34, 7.74, 16.7, 16.7, 8.2, 16.5, 8.23, 16.4, 8.18, 8.2, 16.5, 21.1, 21.1, 21.1, 21.1, 21.1,
         21.1, 21.1]

idx = 0
sum_ = 0
new = list()
for element in a1_tr:
    idx += 1
    sum_ += element
    new.append(element)
    if idx == 7:
        new.append(sum_)
        sum_ = 0
        idx = 0

print(new)

更简洁地说:

代码语言:javascript
复制
a1_tr = [21.1, 10.5, 6.31, 21.1, 6.31, 6.3, 10.4, 17.1, 7.61, 17.2, 7.6, 15.4, 8.54, 8.53, 21.1, 9.47, 7.01, 9.47,
         7.01, 6.98, 21.1, 8.34, 16.7, 16.7, 8.34, 15.3, 8.28, 8.39, 9.83, 20.4, 6.77, 6.78, 21.8, 9.69, 6.78, 7.73,
         16.7, 8.33, 8.34, 7.74, 16.7, 16.7, 8.2, 16.5, 8.23, 16.4, 8.18, 8.2, 16.5, 21.1, 21.1, 21.1, 21.1, 21.1,
         21.1, 21.1]

n = 7
chunks = [a1_tr[idx:idx+n] + [sum(a1_tr[idx:idx+n])] for idx in range(0, len(a1_tr), n)]
new = [x for y in chunks for x in y]
print(new)
票数 0
EN

Stack Overflow用户

发布于 2017-04-22 07:27:20

您可以将项目分组为7,然后使用mapsum追加到lambda

代码语言:javascript
复制
it = iter(a1_tr)
r = [i for x in map(lambda *x: x+(sum(x),), *[it]*7) for i in x] 
print(r)

或者使用更详细的itertools.groupby进行分组,然后取每个组的总和:

代码语言:javascript
复制
from itertools import groupby, count

c = count()
r = []
for _, g in groupby(a1_tr, lambda _: next(c)//7):
    g = list(g)
    g.append(sum(g))
    r.extend(g)
print(r)
票数 0
EN

Stack Overflow用户

发布于 2017-04-22 07:57:29

如果只使用一个列表理解呢?

代码语言:javascript
复制
In [38]: res = []

In [39]: temp = [res.append(el) if (idx+1)%7 != 0 else res.extend([el, sum(a1_tr[idx-6:idx+1])]) for idx, el in enumerate(a1_tr)]

In [40]: res
Out[40]: 
[21.1,
 10.5,
 6.31,
 21.1,
 6.31,
 6.3,
 10.4,
 82.02000000000001,
 17.1,
 7.61,
 17.2,
 7.6,
 15.4,
 8.54,
 8.53,
 81.97999999999999,
 21.1,
 9.47,
 7.01,
 9.47,
 7.01,
 6.98,
 21.1,
 82.13999999999999,
 8.34,
 16.7,
 16.7,
 8.34,
 15.3,
 8.28,
 8.39,
 82.05,
 9.83,
 20.4,
 6.77,
 6.78,
 21.8,
 9.69,
 6.78,
 82.05,
 7.73,
 16.7,
 8.33,
 8.34,
 7.74,
 16.7,
 16.7,
 82.24,
 8.2,
 16.5,
 8.23,
 16.4,
 8.18,
 8.2,
 16.5,
 82.21,
 21.1,
 21.1,
 21.1,
 21.1,
 21.1,
 21.1,
 21.1,
 147.7]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43553314

复制
相关文章

相似问题

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