def problem(n):
myList = []
for j in range(0, n):
number = 2 ** j
myList.append(number)
return myList
我希望此代码根据 2 的前 n 个幂返回 2 的幂。例如,如果我输入 4,我希望它返回 [2,4,6,8,16]。现在,如果我输入 4,代码将返回 [1,2,4,8]。我认为是我的范围弄乱了代码。
def problem(n):
myList = []
for j in range(0, n):
number = 2 ** j
myList.append(number)
return myList
我希望此代码根据 2 的前 n 个幂返回 2 的幂。例如,如果我输入 4,我希望它返回 [2,4,6,8,16]。现在,如果我输入 4,代码将返回 [1,2,4,8]。我认为是我的范围弄乱了代码。
只需使用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) ]
没有幂运算符的另一个简单有效的解决方案(O(1) 中的每一步):
def problem(n):
return [1 << i for i in range(n)]
1 << i 操作是按位操作,对于 i 整数正数转换为 2 ^ i。
如果你想在 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:问题中有一个错字,如果您想要 4 个数字gen(4)
,请range(x)
改用
正如@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]
import math
n = input()
a = [i for i in xrange(2, n+1) if (math.log(i)/math.log(2)).is_integer()]
print a
>>> [2, 4, 8, 16 ...]
返回小于或等于 n 的 2 的幂列表
解释:
一个数只能是 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 的幂数的公式