[英]lstrip method does not produce what I want
我正在尝试将十进制转换为二进制数并删除最左侧的0b,以便可以使用1和0。 但是,当二进制实际上为0时,我成功了。如果从“ 0b0”中将lstrip“ 0b”设置为“ 0”,对吗?
但是里面没有字符。 在输出的最后一行中可以看到它是空的。
到底是怎么回事???
源代码:
value = [255, 255, 255, 0]
binary = [bin(x) for x in value]
binstring = [str(y) for y in binary]
purebin = []
for x in binstring:
purebin.append(x.lstrip("0b"))
print(binary)
print(binstring)
print(purebin)
输出:
['0b11111111','0b11111111','0b11111111','0b0']
['0b11111111','0b11111111','0b11111111','0b0']
['11111111','11111111','11111111',']
您误解了lstrip的工作原理。 这是文档: https : //docs.python.org/2/library/string.html#string.lstrip
基本上,它从给定的字符池中从头开始删除字符 ,而不仅仅是第一次出现。 但是,您要尝试的操作非常简单,只是不要lstrip而是x[2:]
。
PS不需要中间的str
步骤。 bin
给出的是一个字符串。
为什么不采用它们的子字符串(而不是lstrip)?
a = ['0b11111111', '0b11111111', '0b11111111', '0b0']
map(lambda e: e[2:], a)
Out[2]: ['11111111', '11111111', '11111111', '0']
@Maltysen已经对这个问题给出了很好的答案。 或者,如果您不需要0b
,则可以跳过整个bin()
和str()
而只使用format
:
print [format(v, 'b') for v in value]
Out[6]: ['11111111', '11111111', '11111111', '0']
我相信正在发生的是在将“ 0b”解释为空白并被剥离后的0。
如果您调用'0b00000'.lstrip('0b')也会返回空字符串,则可以看到它的作用。
我建议您使用语法“ 0b0” [2:],该语法将为您提供“ 0b”之后的所有字符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.