在python列表的第7个元素后插入前7个元素的总和
我想在第7个元素之后插入前7个元素的和,在另外7个元素之后插入下7个元素的和,诸如此类在python列表的第7个元素后插入前7个元素的总和,python,python-2.7,Python,Python 2.7,我想在第7个元素之后插入前7个元素的和,在另外7个元素之后插入下7个元素的和,诸如此类 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
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个元素:
trsumlist = [82.02000000000001, 81.97999999999999, 82.13999999999999, 82.05, 82.05, 82.24, 82.21, 147.7]
以下是我尝试过的:
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
i=1
x=0
>>>而我>>a1\u 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个元素之后插入任何元素,有人能给我建议其他方法来实现这一点吗?最明显的方法是迭代列表,并保持一个运行总数。然后,在每七个元素之后,加上总数
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)
更简洁地说:
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)
您可以将项目分组为七,然后使用
map
在lambda
中追加sum
:
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
进行分组,然后取每个组的总和:
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)
只使用一个列表如何
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]
下面是另一种方法,使用和的组合
把它分成7个数字的列表,附加总数,然后重新加入列表。谢谢你的建议!这里的np是什么?
将numpy导入为np
(y),以注意到您在前面的代码中遇到的问题。我必须承认,我还没有找到一个解决方案,可以在列表理解中向列表传递两个元素,而您也没有,因此必须选择.append()
.extend()
。在一个循环周期中,列表理解中是否真的没有机会产生两个元素?也许可以从列表中创建一个额外的“循环”循环?
new = []
it = iter(a1_tr)
take = list(islice(it,7)) # take the first 7 elements
while take: #while there is something do
new += take
new.append( sum(take) )
take = list(islice(it,7)) # take the next 7 elements
print(new)