2024-09-29 18:46:16 发布
网友
更新:在python bitstring 3.0.0步骤中具有传统意义
我正在使用pythonbitstring,我有一个ConstBitArray从文件加载,我想得到一个步骤与1不同的切片。在
在普通列表中,我只想:
s = mylist[start:stop:step]
但是位串对于步进有一个奇怪的定义,请参见:
http://packages.python.org/bitstring/slicing.html#stepping-in-slices
有人知道怎么做吗?在
谢谢
在您提供的链接中可以很清楚地看到,他们选择了为mylist[start*step:stop*step]制作mylist[start:stop:step]语法糖,不幸的是,这意味着您将无法以通常的方式使用该步骤
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[a:b:c]
对于你想要的行为,没有这么紧凑的语法。我很想知道你需要它做什么-我想不出它有什么好的用途,这就是为什么选择了step的另一个用途。我能想到的最好的对应物是
s = ConstBitArray().join(mylist[i:i+1] for i in range(start, stop, step))
不过,这不太可能很快。在
如果您只想检查所有或任何位是否已设置/取消设置,那么您可以使用类似
或者
mylist.any(False, range(start, stop, step))
另一种可能更快的方法是切换到使用^{}模块进行切片:
import bitarray s = ConstBitArray(bitarray.bitarray(mylist)[start:stop:step])
如果您主要需要的只是这种切片行为,那么使用bitarray可能会更好,尽管它还不适用于python3。在
在您提供的链接中可以很清楚地看到,他们选择了为
mylist[start*step:stop*step]
制作mylist[start:stop:step]
语法糖,不幸的是,这意味着您将无法以通常的方式使用该步骤你可以试试把这个列为替代品
更新:在第3版中,位串模块的步进行为改变为更传统的含义。下面的答案是位串版本2。在
我是bitstring模块的作者,所以可能能够提供帮助(或者至少解释!)如前所述,}相同)。在
step
用于提供一个乘法器-如果您想以字节或其他比特倍数来指定内容,这将非常有用(因此s[a:b:c]
与{对于你想要的行为,没有这么紧凑的语法。我很想知道你需要它做什么-我想不出它有什么好的用途,这就是为什么选择了step的另一个用途。我能想到的最好的对应物是
不过,这不太可能很快。在
如果您只想检查所有或任何位是否已设置/取消设置,那么您可以使用类似
^{pr2}$或者
另一种可能更快的方法是切换到使用^{} 模块进行切片:
如果您主要需要的只是这种切片行为,那么使用bitarray可能会更好,尽管它还不适用于python3。在
相关问题 更多 >
编程相关推荐