所以我有 t= 111
bin(1111) Out[105]: '0b10001010111'
和
g = bin(111) g Out[16]: '0b1101111'
我的问题是,有没有办法去掉引号。我关心的是对其进行算术运算。
像 g = g -0b1 等等在一次迭代中。
更新
我只是希望例如 g = bin(111)[2:] 在引号中为 1101111 而不是 ‘1101111’。
无论如何,都有一个非常简单的解决方法,而不是采用二进制数并对其进行操作。
length = len(string) #what is the len of this string t = startrange #Equivalent to binary string, i.e. for 111 it is 7 for i in range(int(startrange)): t -= 1 l=tuple((bin(t)[2:].zfill(length)))
PS:但是正如迭代中每次都会发生 bin() 转换一样,这并不是一个严重的性能问题。
如果您希望将二进制数作为字符串进行处理,而不包含引号,可以直接使用切片来移除 0b 前缀。然后可以将其作为数字进行算术运算。
0b
在您的代码中,您可以这样做:
g = bin(111)[2:] # 获取二进制字符串 '1101111' print(g) # 输出 '1101111' # 进行算术操作 g_int = int(g, 2) # 将二进制字符串转换为整数 g_int -= 1 # 对整数执行减法操作 print(bin(g_int)[2:]) # 输出更新后的二进制字符串,不带 '0b'
bin(111)[2:]
'0b'
int(g, 2)
g
bin(g_int)[2:]
g = bin(111)[2:] # 结果 '1101111' g_int = int(g, 2) # 转换为整数 111 g_int -= 1 # 减去 1,结果 110 print(bin(g_int)[2:]) # 输出 '1101110'
正如您所说,虽然每次迭代中都会进行 bin() 转换,但这通常不会成为性能瓶颈。除非处理非常大的数据量,否则不必担心此类操作的效率问题。
bin()
希望这能帮到您!如果有更多问题,随时告诉我!