Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何返回2的幂的数字列表?_Python - Fatal编程技术网

Python 如何返回2的幂的数字列表?

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

我希望这段代码根据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 ** 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 ...]