Вы могли бы сделать что-то в одиночку с этими строками:
# Split the binary and grab interested part, and its size.
# >> bin(123456789) == "0b111010110111100110100010101"
binary = bin(123456789)[2:]
size = len(binary)
numbers = []
for i in range(size):
# Checks to see if the binary[i] is not equals to zero.
if binary[i] is not "0":
# Indexes the `binary` string and adds (size - i - 1) zeros to the end of it.
number = int(binary[i] + "0" * (size - i - 1), 2)
numbers.append(number)
print(numbers)
# >> [67108864, 33554432, 16777216, 4194304, 1048576, 524288, 131072, 65536, 32768, 16384, 2048, 1024, 256, 16, 4, 1]
Вот более короткое решение для этого.
binary = bin(13)[2:]
nums = [
int(binary[i] + "0" * (len(binary) - i - 1), 2)
for i in range(len(binary))
if binary[i] is not "0"
]
return nums
Вот решение с одной линией, в том числе и для него.
print((lambda binary: [int(binary[i] + "0" * (len(binary) - i - 1), 2) for i in range(len(binary)) if binary[i] is not "0"])(binary = bin(123456789)[2:]))