首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成奇数列表时出现内存错误

生成奇数列表时出现内存错误
EN

Stack Overflow用户
提问于 2016-07-01 00:43:21
回答 2查看 110关注 0票数 1

请看下面的代码。它列出了从1到100的所有奇数。然后,它获取该列表并将其分块为子列表,每个子列表都比上一个大一个元素。

代码语言:javascript
复制
mylist = list(range(1, 100, 2))
out = []
i = 1 # Start off with size 1, because we don't care about the initial empty list
tri = 0
while tri+i < len(mylist):
    tri = i*(i+1)//2 # Get sum of 0+1+2+..+i
    out.append(mylist[tri-i:tri])
    i+=1
print(out)

我想使用下面的代码创建一个函数,它接受一个输入(n),该输入将对应于新的子列表(out)的第(n-1)个索引,并对该子列表中的所有元素求和。我获取了输入n并将其提升到其自身的幂+1 (n**(n+1)),但我不断得到超过n= 5的内存错误。以下是产生错误的实验代码。

代码语言:javascript
复制
n = 10
mylist = list(range(1,n**(n+1), 2))
out = []
i = 1
while len(mylist):
    out.append(mylist[:i])
    mylist = mylist[i:]
    i+=1
print(sum(out[n-1]))

Traceback (most recent call last):
  File "python", line 2, in <module>
MemoryError

编辑(澄清信息):我想创建一个函数,当给定一个输入(n)时,它将转到该子列表的n-1个索引,并对列表中的元素求和。我正在做一个python挑战题,它被表示为一个奇数三角形,其中金字塔的顶部是1,然后下一行是3和5,依此类推。因此,如果给定n,则转到三角形中的第n行,并对该行的数字求和。希望这有助于解释。

编辑2:为了得到一个从1开始递增1的数字三角形第n行的总和,下面的代码通过了测试。但是,这不适用于由所有奇数、所有偶数或任何非单一递增数字序列组成的数字三角形:

代码语言:javascript
复制
def triangle_row_sum(n):
    last_in_row = sum(range(1, n+1)) 
    first_in_row = last_in_row - (n-1) 
    p = sum(range(first_in_row, last_in_row + 1)) 
    return p

然而,我仍然在研究一个从1开始的奇数三角形的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2016-07-01 01:03:55

由于这是一项挑战,我将为您指出正确的方向:

您不需要将三角形存储在内存中。您想要的是弄清楚如何计算三角形中指定行处的数字:

代码语言:javascript
复制
1)    1
2)   2 3
3)  4 5 6
4) 7 8 9 10

如果我想要第4行,它从列表中的第7个数字开始,到第10个数字结束。对于线n,有没有办法,计算出start数和end数是多少?然后你不必将树存储在内存中,你可以只计算开始和结束的数字,然后将它们相加。

票数 2
EN

Stack Overflow用户

发布于 2017-06-02 13:07:21

对于一个包含奇数的三角形,在第n行,第一个数应该是n*(n-1)+1。之后,您可以很容易地在该行中生成n个奇数的序列并对它们求和。

sum([n*(n-1)+1+2*i for i in range(n) ])

这将给出奇数三角形中第n行的总和。

对于偶数的三角形,第n行的和为

sum([n*(n-1)+2*i for i in range(n) ])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38129000

复制
相关文章

相似问题

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