按递增顺序打印一个数字作为 2 的幂之和

Printing a number as a sum of powers of 2 in increasing order

我正在尝试打印一个十进制整数(非负数)作为 2 的幂之和,即对于输入 10,它应该打印不带引号的“2 8”。我已经写了这段代码,但是有人可以给我一份吗?[=​​11=]

n = bin(int(raw_input()))[-1:1:-1]
print (' ').join([str((int(n[j])+1)**j) for j in xrange(len(n)) if n[j] == '1'])

最好将它分布在多行中,并且在列表推导中使用 and input 隐藏了代码正在执行的信息的关键部分。

最终,你要求做的事情并不漂亮,但无论如何:

print (' ').join([str(2**i) for i,j in enumerate(bin(int(raw_input()))[-1:1:-1]) if j == '1'])

印刷精美:

print ' '.join(
    [str(2**i)
     for i,j in enumerate(
         bin(int(raw_input()))[-1:1:-1]
       )
      if j == '1']
  )

备注:

  • int(n[j])+1) 将始终为 2,因为您仅在 j 为 1 时才进行迭代。
  • enumerate returns 元组列表,每个元组包含索引和值,因此您不需要存储 n,可以直接针对 j 进行测试.
  • Python 可以遍历项目列表而不必通过索引获取它们,这是 [list[i]**2 for i in len(list)][i**2 for i in list]
  • 之间的区别
  • 您不需要在字符串两边加上方括号,因此您可以通过这样做节省一些 space:

    " ".join(...)
    

    而不是这个:

    (" ").join(...)