微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 用于汇总下几个项目的数据类型

我应该使用什么数据结构来表示下表

'a',1
'b',2
'c',3
'd',4
'e',5

所以计算下一行中第二项的总和似乎很自然:

例如当i = 1时

'a',2
'b',3
'c',4
'd',5

当i = 2时

'a',2+3=5
'b',3+4=7
'c',4+5=9

当我= 3

'a',2+3+4=9
'b',3+4+5=12

当我= 4

'a',2+3+4+5=14

我的两个想法:

>最初我将该表作为子列表列表:

lst = [['a',1],['b',2],['c',3],['d',4],['e',5]]

但我无法弄清楚如何进行上述计算(在
自然或直截了当的方式). sum(lst [0:0 i] [1])不起作用.
关于我的方式的问题是如何表示i的子列表
表中第二列的连续值,为此
lst [0:0 i] [1]不起作用. (并排使用两个括号不起作用吗?)
>我有一个想法,但我不知道如何实现它(有人可以指出它是否可以实现?):

>将上面的列表拆分为两个列表,每个列表对应每列.
>在第二列列表上进行计算
>将第一个列表和结果组合在第二列列表中.

谢谢.

解决方法

您可以创建以下功能

def my_sum(l,i):
    return [
        [x[0],sum(y[1] for y in l[j: j + i])] for j,x in enumerate(l[:-i],1)
    ]

例子:

>>> my_sum(lst,1)
[['a',5]]
>>> my_sum(lst,2)
[['a',5],7],9]]
>>> my_sum(lst,3)
[['a',9],12]]
>>> my_sum(lst,4)
[['a',14]]

编辑:

使用numpy基于第二个想法的实现:

import numpy as np

def my_sum(l,i):
    a,b,n = [v[0] for v in lst],np.array([v[1] for v in lst]),len(l)
    sums = np.zeros(n,dtype=np.int)
    for j in xrange(1,i + 1):
        sums[:n - j] += b[j: n]
    return zip(a[:-i],sums[:-i])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐