2012-11-14 32 views
1

可能重复:
How to return a list of numbers of the power of 2?我需要的是一个正整数(n)的启动函数,并返回2的幂的列表,从2

我所知道的是:

l = [] 

for i in range(2, n=2): 
    l.append(1**2) 

return l 

我不需要有一个完整的等式,我只需要知道如何做这样的等式的基础知识。

+0

这是一个小暧昧;你想从2到n? 2到n^2?都不是? – jrajav

+1

你的意思是做'l.append(i ** 2)'? – Michael0x2a

+0

例如,使用4并尝试在列表开始处找到以2开头的2次幂的列表。EX:[2,4,8,16]应该是答案 –

回答

1

像这样的事情?

def powers(n): 
    return [2**i for i in range(1, n+1)] 

more info

这是同样的方式,但使用for循环:

def powers(n): 
    l = [] 
    for i in range(1, n+1): 
     l.append(2**i) 
    return l 

SNIPPIT你上面贴有以下原因没有工作代码:

  • 你做l.append(1**2) - 这是一个到第二电源,这将永远等于一个。你大概的意思做l.append(2**i),这是2的变量i
  • 你有2开始你的范围的权力,但你想,从1开始,这样在你的列表中的第一项是2,而不是4
  • 您使用的范围不正确。有几种方法可以做到的范围

    范围(停止)#开始默认为0
    范围(启动,停止)
    范围(启动,停止,步骤)#如果没有指定,一步默认为1

+0

感谢您的帮助! –

2

您的意思是?

def get_powered_vals(endVal): 
    return [2**val for val in xrange(endVal+1)] 

get_powered_vals(4) 
>>> [2,4,8,16] 

或者没有列表理解:

def get_powered_vals(endVal): 
    vals = [] 
    for val in xrange(endVal+1): 
     vals.append(2**val) 
     print val, vals[-1] 
    return vals 

get_powered_vals(4) 
>>> 1, 2 
>>> 2, 4 
>>> 3, 8 
>>> 4, 16 
>>> [2,4,8,16] 
+1

虽然list comp可能是这样做的方式,但您可能希望显示带有list.append的显式循环。如果OP不理解,那么list-comp可能会问得太多。 – mgilson

+0

@mgilson -sure加了,谢谢 –

+0

我会试试这些,非常感谢 –

1

而是所有的低效幂的,只取最后计算出的值,并通过2

乘以它作为一个功能:

>>> def powers(n): 
... ret = [1] 
... while len(ret) < n: 
...  ret += [ret[-1]*2] 
... return ret 
... 
>>> powers(10) 
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512] 

作为发电机:

>>> def gen_powers(n): 
... last = 1 
... while n: 
...  yield last 
...  last *= 2 
...  n -= 1 
... 
>>> list(gen_powers(10)) 
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512] 

作为代码高尔夫球单行:

reduce(lambda a,b:a+[2*a[-1]],range(10),[1]) 
相关问题