我试图表达一个列表,表示二进制数字作为实际二进制数,如(1,3,6)表示0b100101
。首先,我尝试将它们加总为2 ^ 1 + 2 ^ 3 + 2 ^ 6然后转换为二进制
with open('DATA.txt') as f:
for line in f:
myLine=line.rstrip().split("\t")
print [bin(2**int(l)) for l in myLine[1:5]]
我将其转换为列表,如下面的a
所以
>>> a=['0b10000000000000000000000000', '0b100000000000', '0b100000000000000000000000000000']
>>> a[1]|a[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'str' and 'str'
>>> bin(a[1])+bin(a[2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an index
所以
我应该如何将功率矢量转换为二进制数,即如何从功率二进制数表示中获得真正的二进制数表示?
简单示例
输入
['0b10000000000000000000000000', '0b100000000000', '0b100000000000000000000000000000']
预期输出
0b100010000000000000100000000000
答案 0 :(得分:2)
bin
内置函数返回的值是一个简单的字符串。这不是“二进制数”。二进制数不存在,只有数字的二进制表示。 Python整数在内部表示为base-2,bin
函数允许“看到”这个(实际上是模数和符号表示,而不是二进制补码)表示为字符串。
如果要对这些字符串执行|
等按位操作,则必须将它们转换为整数然后再转换为字符串:
In [7]: bin(int('0b10000', 2)|int('0b100', 2))
Out[7]: '0b10100'
如果给定二进制字符串列表,您希望获得组合这些字符串的数字,则可以使用reduce
函数:
In [8]: import operator as op
In [9]: from functools import reduce
In [10]: a = ['0b10000000000000000000000000', '0b100000000000', '0b100000000000000000000000000000']
In [13]: bin(reduce(op.or_, (int(num, 2) for num in a)))
Out[13]: '0b100010000000000000100000000000'
答案 1 :(得分:1)
Bakuriu非常清楚地解释了发生了什么,所以我会简短地说明这一点。问题的解决方案是
with open('DATA.txt') as f:
for line in f:
myLine=line.rstrip().split("\t")
print sum(2**int(l) for l in myLine[1:5])
请注意,求和等于二进制,或者只要设置不同的位,我在这里假设是这种情况。