Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于过滤的位运算符?_Python_Django_Database Design_Architecture_Bit Manipulation - Fatal编程技术网

Python 用于过滤的位运算符?

Python 用于过滤的位运算符?,python,django,database-design,architecture,bit-manipulation,Python,Django,Database Design,Architecture,Bit Manipulation,我正在努力为一个相当典型的调度应用程序找到一个好的数据表示。把事情搞得一团糟的要求是,每天都有两方可以任意使用,并且有一些课程或多或少在固定的时间提供(尽管这里也可能出现例外情况),这与当时是否有两方可用无关 由于后面的挑战之一将是为预定课程找到可用的提供者,我想知道是否有一种快速而优雅的方法可以简单地将这些课程的每周可用性模式存储在一个64位整数中,并带有一种位掩码 我的基本原理是,基本上每天有24小时(

我正在努力为一个相当典型的调度应用程序找到一个好的数据表示。把事情搞得一团糟的要求是,每天都有两方可以任意使用,并且有一些课程或多或少在固定的时间提供(尽管这里也可能出现例外情况),这与当时是否有两方可用无关

由于后面的挑战之一将是为预定课程找到可用的提供者,我想知道是否有一种快速而优雅的方法可以简单地将这些课程的每周可用性模式存储在一个64位整数中,并带有一种位掩码

我的基本原理是,基本上每天有24小时(<2^5),将一天分成10分钟的间隔,每天有144个时段(远小于2^8)。因此,每个人都可以得到一个每周计划,每天都是当天的8位可用性掩码(7 x 8位=56位,小于64位整数)

过滤和识别潜在用户可以非常快速、简单地完成,方法是将任何潜在的约会转换为相同类型的掩码,然后只进行按位操作,只选择可用的候选用户,而不必考虑进一步的规则等

我想知道的是,为什么我看不到更多的过滤在位级别上发生,因为这似乎是相当直接的,我猜,最终可能会比更详细和明确的逻辑更优雅,有什么想法/想法吗?

的典型例子。首先让你的程序运行,只有当它运行缓慢时,你才应该开始考虑用位操作优化它。您应该以尽可能干净的方式开始实现它,例如使用向量或布尔值列表,它们不限于64的任意长度

例如,可以将
numpy
数组与
dtype=bool
一起使用。这可能比手工编码的位向量要小一些,但您可以免费获得所有内容(您还可以使用诸如
|、^和~
)之类的运算符),并且在顶部您可以有几乎无限的大小,允许切片、索引等。

这是一个典型的示例。首先让你的程序运行,只有当它运行缓慢时,你才应该开始考虑用位操作优化它。您应该以尽可能干净的方式开始实现它,例如使用向量或布尔值列表,它们不限于64的任意长度

例如,可以将
numpy
数组与
dtype=bool
一起使用。这可能比手工编码的位向量要小一些,但您可以免费获得所有内容(您还可以使用诸如
|、^和~
)之类的运算符),并且在顶部您可以有几乎无限的大小,允许切片、索引等。

这是一个典型的示例。首先让你的程序运行,只有当它运行缓慢时,你才应该开始考虑用位操作优化它。您应该以尽可能干净的方式开始实现它,例如使用向量或布尔值列表,它们不限于64的任意长度

例如,可以将
numpy
数组与
dtype=bool
一起使用。这可能比手工编码的位向量要小一些,但您可以免费获得所有内容(您还可以使用诸如
|、^和~
)之类的运算符),并且在顶部您可以有几乎无限的大小,允许切片、索引等。

这是一个典型的示例。首先让你的程序运行,只有当它运行缓慢时,你才应该开始考虑用位操作优化它。您应该以尽可能干净的方式开始实现它,例如使用向量或布尔值列表,它们不限于64的任意长度


例如,可以将
numpy
数组与
dtype=bool
一起使用。这可能比手工编码的位向量要小一些,但您可以免费获得所有内容(您还可以使用诸如
|、^和~
)之类的运算符),并且在顶部可以有几乎无限的大小,允许切片、索引,等等。

一方面,我直觉上同意,但另一方面,这实际上是基于简单的优雅而出现在我脑海中的。如果您只使用长列表的布尔值或向量,我不知道您如何能够简单地确保所有边缘情况下的可用性被中断在中间期等-所有这些在按位操作实际上将被照顾的“免费”。-您只需创建一个简单的库,该库包含开始和结束的时间和日期,并转换为逐位比较的逐位模式。@Jonas什么边缘情况?我看不到任何情况下,你可以解决64位整数,你不能做的列表/布尔数组。既然标准python或非常常见的外部库(如numpy)中已经提供了所有功能,为什么还要浪费时间编写自己的库呢。这正是过早进行优化的原因:通过使用快速按位操作,您可能会节省几秒钟,但与此同时,如果您完成了,您已经花了一周的时间来实现和调试您的库。当然,除非你这样做是为了好玩,否则你可以做任何你想做的事…@BasSwinckels我可能没有正确理解你的解决方案。所以你的意思是,本质上,我不使用11001111作为8位整数,而是使用一个包含8个元素的布尔数组?如果我有一个约会是00000111(即前三个时间段),那么我只需要为它创建另一个bool数组,并使用逻辑_,看看该时间表是否在那里可用?听起来它可以工作。但是现在在数据库中保存这个计划信息还有一个额外的问题(这个项目是使用Django的基于web的)-我当然可以使用类似cPickle的东西,但是每次筛选时都必须反序列化所有条目