python 把列表中为1的元素替换为2的x次方

任意输入一个含有0和1的列表,

现在需要把是1的元素写成2的x次方,x取决于1的index,如果元素是0,就不用改变。

从列表中的最后一个元素开始是2^0,依次向左边是[2^x, 2^(x-1),......,2^2,2^1,2^0]

例如:[0,1,1,0,1,0] 应该返回 [0,16,8,0,2,0]   (注: 所对应的是 [0, 2^4 , 2^3 , 0,2^1 , 0] ) 

[0,1,0,1]返回[0, 4, 0, 1]

           

 

这个就是二进制转十进制嘛。

sa=[0,1,0,1]
da=[0]*len(sa)

for i in range(0,len(sa)):
  da[i] = (sa[i]*2**(len(sa)-i-1))

print(da)

 

a=[0,1,1,0,1,0] 
[0 if val==0 else pow(2,len(a)-i-1) for i, val in enumerate(a)]

@规则边缘 可以简化下,用 Python List Comprehensions:

  • def binary_2_decimal(b): l = len(b); return [x*2**(l-i-1) for i,x in enumerate(b)]
  • print(binary_2_decimal([0,1,0,1]))