def problem(n):
myList = []
for j in range(0, n):
number = 2 ** j
myList.append(number)
return myList
我希望这段代码根据前2的2次幂返回2的幂。例如,如果我输入4,我希望它返回[2,4,6,8,16]。现在,如果我输入4,代码将返回[1,2,4,8]。我认为这是我的范围,这会搞乱代码。
答案 0 :(得分:6)
只需使用range(1,n+1)
即可。 range
对某些人来说有点混乱,因为它不包括端点。因此,range(3)
会返回列表[0,1,2]
,range(1,3)
会返回[1,2]
。
作为旁注,表格的简单循环:
out = []
for x in ...:
out.append(...)
通常应该用列表推导替换:
out = [ 2**j for j in range(1,n+1) ]
答案 1 :(得分:2)
另一个简单而有效的解决方案(O(1)中的每一步)没有幂运算符:
def problem(n):
return [1 << i for i in range(n)]
1&lt;&lt;我的操作是一个按位运算,转换为2 ^ i为i整数正。
答案 2 :(得分:1)
如果你想在O(1)中完成每一步:
def gen(x):
i = 2
for n in range(x + 1):
yield i
i <<= 1
>>> list(gen(4))
[2, 4, 8, 16, 32]
PS:问题中有拼写错误,如果您想要gen(4)
的4个号码,请改用range(x)
答案 3 :(得分:0)
正如@JBernardo指出的那样,我认为你的问题中有一个拼写错误。
def squares(n):
power = n
square_list = []
for i in range(1,n+1):
square_list.append(2 ** i)
return square_list
print squares(4)
将返回
[2,4,8,16]
答案 4 :(得分:0)
import math
n = input()
a = [i for i in xrange(1, n+1) if (math.log(i)/math.log(2)).is_integer()]
print a
>>> [2, 4, 8, 16 ...]
说明:
如果数字的对数除以2的对数是一个整数,那么它只能是2的幂。
例如log(32)= log(2 ^ 5)= 5 * log(2)
5 * log(2)除以log(2)得出5,它是整数。
列表中还将有floor(math.log(n,2))个元素,因为如果n本身不是2的幂,那就是n以下2的幂数的公式。