用于对后面几个项目求和的数据类型

2024-04-24 19:20:43 发布

您现在位置: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

当i=3时

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

当i=4时

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

我的两个想法:

  1. 最初,我将表表示为子列表列表:

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

    但我不知道如何做上述计算(在一个 自然或直截了当的方式)。sum(lst[0:0+i][1])不起作用。 关于我的方式的问题是如何表示我的子列表 表中第二列的连续值 lst[0:0+i][1]不起作用。(并排使用两个支架不起作用吗?)

  2. 我有另一个想法,但我不知道如何实现它(有人能指出它是否可以实现吗?)地址:

    • 将上述列表拆分为两个列表,每列对应一个列表。

    • 对第二列列表进行计算

    • 合并第一个列表和第二列列表上的结果。

谢谢。你知道吗


Tags: 数据结构列表地址方式支架sumlst总和
3条回答

你可以用字典。它们有键和值来存储变量的值。可以将函数和其他变量作为键。你知道吗

mydata = {'a': 1, 'b': 2 # and so on...
         }

>>> mydata['a']
1

对于计算,我不太确定怎么做。。。你可以使用mydata.itervalues()获得所有的值,然后重新分配给键,如果你知道如何处理数字的话(我不完全确定数字到底发生了什么)。你知道吗

编辑:

因为字典没有排序,所以可以使用^{}。当它记住插入键时,这可能是一个很好的应用程序。如果您不能使用它,那么内置的^{}函数也可能很有用。你知道吗

本身并不是一个“数据结构”,但您可以尝试以下方法:

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

def foo(i):
    for j in range(len(vals)-i):
        print labels[j], sum(vals[j+1:j+1+i])

你也可以把整件事都推到一节课上。你知道吗

可以创建以下函数:

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', 2], ['b', 3], ['c', 4], ['d', 5]]
>>> my_sum(lst, 2)
[['a', 5], ['b', 7], ['c', 9]]
>>> my_sum(lst, 3)
[['a', 9], ['b', 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])

相关问题 更多 >