我所知道的是:
l = []
for i in range(2, n=2):
l.append(1**2)
return l
我不需要有一个完整的等式,我只需要知道如何做这样的等式的基础知识。
答案 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)]
这是相同的方式,但使用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
您使用的范围不正确。有几种方法可以做范围
范围(停止)#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])