繁体   English   中英

lstrip方法无法产生我想要的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM