加入pythonbitstring 2.2.0

2024-09-29 18:46:16 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:在python bitstring 3.0.0步骤中具有传统意义

我正在使用pythonbitstring,我有一个ConstBitArray从文件加载,我想得到一个步骤与1不同的切片。在

在普通列表中,我只想:

s = mylist[start:stop:step]

但是位串对于步进有一个奇怪的定义,请参见:

http://packages.python.org/bitstring/slicing.html#stepping-in-slices

有人知道怎么做吗?在

谢谢


Tags: http列表定义packagesstep步骤切片start
2条回答

在您提供的链接中可以很清楚地看到,他们选择了为mylist[start*step:stop*step]制作mylist[start:stop:step]语法糖,不幸的是,这意味着您将无法以通常的方式使用该步骤

你可以试试把这个列为替代品

[mylist[i] for i in range(start,stop,step)]

更新:在第3版中,位串模块的步进行为改变为更传统的含义。下面的答案是位串版本2。在


我是bitstring模块的作者,所以可能能够提供帮助(或者至少解释!)如前所述,step用于提供一个乘法器-如果您想以字节或其他比特倍数来指定内容,这将非常有用(因此s[a:b:c]与{}相同)。在

对于你想要的行为,没有这么紧凑的语法。我很想知道你需要它做什么-我想不出它有什么好的用途,这就是为什么选择了step的另一个用途。我能想到的最好的对应物是

s = ConstBitArray().join(mylist[i:i+1] for i in range(start, stop, step))

不过,这不太可能很快。在

如果您只想检查所有或任何位是否已设置/取消设置,那么您可以使用类似

^{pr2}$

或者

mylist.any(False, range(start, stop, step))

另一种可能更快的方法是切换到使用^{}模块进行切片:

import bitarray
s = ConstBitArray(bitarray.bitarray(mylist)[start:stop:step])

如果您主要需要的只是这种切片行为,那么使用bitarray可能会更好,尽管它还不适用于python3。在

相关问题 更多 >

    热门问题