更新:在第 3 版中,进入位串模块的行为已更改为更传统的含义。下面的答案是指位串版本 2。
我是 bitstring 模块的作者,所以可能可以提供帮助(或至少解释一下!)正如已经指出的那样,step
它用于提供乘数 - 如果您想以字节或其他位的形式指定事物,这很有用倍数(因此s[a:b:c]
与 相同s[a*c:b*c]
)。
对于您似乎想要的行为,没有如此紧凑的语法。我很想知道你需要它来做什么——我永远想不出它有什么好的用途,这就是为什么选择了 step 的其他用途。我能想到的最好的等价物是
s = ConstBitArray().join(mylist[i:i+1] for i in range(start, stop, step))
不过,这不太可能很快。
如果您只想检查所有或任何位是否已设置/取消设置,那么您可以使用类似
mylist.all(True, range(start, stop, step))
或者
mylist.any(False, range(start, stop, step))
另一种可能更快的方法是切换到使用bitarray
模块进行切片:
import bitarray
s = ConstBitArray(bitarray.bitarray(mylist)[start:stop:step])
如果您的主要需求只是这种切片行为,那么使用 bitarray 可能会更好,尽管它还不适用于 Python 3。