Python 如何返回2的幂的数字列表?
我希望这段代码根据2的前n次幂返回2的幂。例如,如果我在4中输入,我希望它返回[2,4,6,8,16]。现在,如果我输入4,代码返回[1,2,4,8]。我想是我的射程弄乱了密码 只要使用Python 如何返回2的幂的数字列表?,python,Python,我希望这段代码根据2的前n次幂返回2的幂。例如,如果我在4中输入,我希望它返回[2,4,6,8,16]。现在,如果我输入4,代码返回[1,2,4,8]。我想是我的射程弄乱了密码 只要使用范围(1,n+1)就可以了范围对于某些人来说有点混乱,因为它不包括端点。因此,range(3)返回列表[0,1,2],range(1,3)返回[1,2] 作为旁注,表单的简单循环: def problem(n): myList = [] for j in range(0, n): number = 2
范围(1,n+1)
就可以了<代码>范围对于某些人来说有点混乱,因为它不包括端点。因此,range(3)
返回列表[0,1,2]
,range(1,3)
返回[1,2]
作为旁注,表单的简单循环:
def problem(n):
myList = []
for j in range(0, n):
number = 2 ** j
myList.append(number)
return myList
通常应替换为列表理解:
out = []
for x in ...:
out.append(...)
如果要执行O(1)中的每个步骤:
def gen(x):
i=2
对于范围(x+1)内的n:
产量一
i>列表(gen(4))
[2, 4, 8, 16, 32]
PS:问题中有一个输入错误,如果你想在
gen(4)
中输入4个数字,请使用range(x)
,而不是@JBernardo指出的,我假设你的问题中有一个输入错误
def gen(x):
i = 2
for n in range(x + 1):
yield i
i <<= 1
>>> list(gen(4))
[2, 4, 8, 16, 32]
会回来的
[2,4,8,16]另一种简单而有效的解决方案(O(1)中的每一步),无需电源操作符:
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)
def问题(n):
返回[1]
返回小于或等于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的幂,那么它只返回[1,2,4,6,8,16]的列表。我希望它只返回[2,4,6,8,16]。换句话说,从2开始。它是否应该是
范围(1,n+1)
?他不想让它包括4**0
@Eric--谢谢。我没有仔细看那些东西。是的,就是这样。我刚刚弄明白了。谢谢伙计们!因为for循环以零开始,而不是1。以零开始,任何使用零的数字的幂都是1。mgilson和Erics代码会返回你正在寻找的答案。我认为你不希望它返回[2,4,6,8,16]
,因为6
不是2的幂。哦,2位技巧的巧妙幂——虽然与OP的API一致,但你不希望范围(x)
?(gen(4)
返回4个数字。)
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)
def problem(n):
return [1 << i for i in range(n)]
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 ...]