【问题标题】:How to return a list of numbers of the power of 2?如何返回 2 的幂的数字列表?
【发布时间】:2012-11-13 02:11:53
【问题描述】:
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]。我认为是我的范围弄乱了代码。

【问题讨论】:

  • 我认为您不希望它返回 [2,4,6,8,16],因为 6 不是 2 的幂。

标签: python


【解决方案1】:

只需使用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,4,6,8,16] 的列表。我希望它只返回 [2,4,6,8,16]。换句话说,从 2 开始。
  • 不应该是range(1, n+1)吗?他不希望它包含4**0
  • @Eric -- 谢谢。我没仔细看那些东西。
  • 是的,就是这样。我刚刚想通了。谢谢大家!
  • 你有一个非一的错误,因为 for 循环从零开始,而不是 1。从零开始,使用零的任何数字的幂都是一。 mgilson 和 Erics 代码将返回您正在寻找的答案。
【解决方案2】:

没有幂运算符的另一个简单有效的解决方案(O(1) 中的每一步):

def problem(n):
    return [1 << i for i in range(n)]

1

https://en.wikipedia.org/wiki/Arithmetic_shift

【讨论】:

    【解决方案3】:

    如果你想在 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)

    【讨论】:

    • 哦 2 位技巧的聪明力量——虽然要与 OP 的 API 保持一致,但您不想要 range(x) 吗? (gen(4) 返回 4 个数字。)
    【解决方案4】:

    正如@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]

    【讨论】:

      【解决方案5】:
      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 的对数是一个整数。

      例如。日志(32) = 日志(2^5) = 5 * 日志(2)
      5 * log(2) 除以 log(2) 得到 5,它是一个整数。

      列表中还会有 floor(math.log(n, 2)) 元素,因为如果 n 本身不是 2 的幂,则这是 n 以下 2 的幂数的公式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 2014-02-26
        • 2011-10-27
        • 2019-04-29
        • 2013-10-22
        • 1970-01-01
        相关资源
        最近更新 更多