我试图打印出十进制整数(非负数)作为2的幂的总和,即对于输入10,它应该打印“2 8”而不带引号。我已经编写了这段代码,但有人可以给我一个单行代码。
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'])
答案 0 :(得分:4)
将这种情况分散到muplitple行更好,并且在列表理解中使用和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
返回一个元组列表,每个元组都包含索引和值,因此您无需存储n
,并且可以直接针对j
进行测试。[list[i]**2 for i in len(list)]
和[i**2 for i in list]
您不需要在字符串周围放置括号,这样就可以节省一些空间:
" ".join(...)
而不是:
(" ").join(...)