小能豆

Python:从二进制数中去除字符串引号

py

所以我有 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() 转换一样,这并不是一个严重的性能问题。


阅读 17

收藏
2024-12-05

共1个答案

小能豆

如果您希望将二进制数作为字符串进行处理,而不包含引号,可以直接使用切片来移除 0b 前缀。然后可以将其作为数字进行算术运算。

在您的代码中,您可以这样做:

g = bin(111)[2:]  # 获取二进制字符串 '1101111'
print(g)  # 输出 '1101111'

# 进行算术操作
g_int = int(g, 2)  # 将二进制字符串转换为整数
g_int -= 1  # 对整数执行减法操作
print(bin(g_int)[2:])  # 输出更新后的二进制字符串,不带 '0b'

解释:

  1. bin(111)[2:]:将数字 111 转换为二进制,并去掉前缀 '0b'
  2. int(g, 2):将二进制字符串 g 转换为十进制整数,方便进行算术运算。
  3. bin(g_int)[2:]:将更新后的整数再次转换为二进制字符串并去掉 '0b'

例子输出:

g = bin(111)[2:]  # 结果 '1101111'
g_int = int(g, 2)  # 转换为整数 111
g_int -= 1  # 减去 1,结果 110
print(bin(g_int)[2:])  # 输出 '1101110'

性能提示:

正如您所说,虽然每次迭代中都会进行 bin() 转换,但这通常不会成为性能瓶颈。除非处理非常大的数据量,否则不必担心此类操作的效率问题。

希望这能帮到您!如果有更多问题,随时告诉我!

2024-12-05