我将值集存储为python长整数,以不同的2**I和的形式存储,因为python允许对其整数进行位操作。对于我的许多程序来说,这比使用数据结构要快得多。在
我经常发现自己想取两个位值的差。在
示例:
假设我有两个值,用2和4表示。通过并集,它们形成一个集合,值为6。(110) 然后我有第二个集合,十进制值10(二进制1010),即2和8。在
我想找到第一组中的值,而不是第二组中的值。如果我使用集合结构,我会取集合差。但我用的是整数。如果我试着做些改变,那就行不通了(应该是-4)。在
到目前为止,我发现自己在做value1-(value1&value2)。这需要两个单独的操作来找出差异。有没有一种方法可以利用python提供的功能在一个操作而不是两个操作中快速完成这项工作?在
不是在一个操作中,但是您应该坚持位操作(而不是})。如果您希望
+
或{value1
中的位不在value2
中,通常的拼写方法是也就是说,})。在
value1
与value2
的补码的交集(注意这里的一元前缀运算符是~
,而不是{集差}的补码的交集。在
B-A
只是B
与{而且,虽然没有位差分运算符,但是有位交集(
&
)和位补码(~
)运算符。所以:或者,用你的例子:
^{pr2}$当然,您可以将其归纳为一个函数:
但是,如果你要做很多这样的事情,而按位操作不是很自然,你可能需要在PyPI中搜索bit set和{a2}的库,这将给你一个类似于一组布尔值的对象,但是存储为(并且可以有效地转换为)一个整数。在
我选择^{} 是因为它看起来很有前途:
就像用套路一样。但我看不出有什么明显的方法可以把这个值作为一个大整数来访问。可能还有其他库更适合您的需要;我只是在快速扫描后才选择了一个。在
相关问题 更多 >
编程相关推荐