我需要一个以正整数(n)开头的函数,并返回2的幂列表,从2开始

时间:2012-11-14 03:19:01

标签: python list function integer return

  

可能重复:
  How to return a list of numbers of the power of 2?

我所知道的是:

l = []

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

return l

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

3 个答案:

答案 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 :(得分: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),它是变量i
  • 的2
  • 您的范围是2,但是您希望从1开始,以便列表中的第一个字词为2而不是4。
  • 您使用的范围不正确。有几种方法可以做范围

      

    范围(停止)#Start默认为0
      范围(开始,停止)
      范围(开始,停止,步骤)#如果未指定,则步骤默认为1

答案 2 :(得分: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])