Python 列表到按位运算

Posted

技术标签:

【中文标题】Python 列表到按位运算【英文标题】:Python list to bitwise operations 【发布时间】:2012-02-12 18:12:41 【问题描述】:

有没有办法获取 django 查询表达式列表(例如Q(first_name="Jordan"),其中Qdjango.db.models.Q)并将它们按位或在一起?

换句话说,我有这样的东西:

search_string = "various search terms"

我想这样做:

search_params = [Q(description__icontains=term) for term in re.split(r'\W', search_string)]
search_params = something_magical(search_params)
results = Record.objects.filter(search_params)

现在search_params 等同于Q(description__icontains="various") | Q(description__icontains="search" | Q(description__icontains="terms"

我知道这样的功能是可能的:

def something_magical(lst):
    result = lst[0]
    for l in lst[1:]
        result |= l
    return result

所以我想知道这个功能是否已经内置在 Python 中(我假设它比我这里的函数更优化)。

虽然我对这个应用程序感兴趣,但我也只是理论上对它感兴趣。

【问题讨论】:

我认为没有这样的 django 运算符...但是您可以只执行所有“或”查询,然后使用 python 集合运算符来组合结果吗? (docs.python.org/library/sets.html#set-objects) @RichardGreen 可以创建非常丑陋的查询 【参考方案1】:

你可能想要

import operator 
from functools import reduce    # Python 3
search_params = reduce(operator.or_, search_params, Q())

这将在search_params 中的所有项目之间放置一个按位或(|),从一个空条件Q() 开始。

【讨论】:

不错!这样的事情让我对python的爱越来越深。 刚刚玩了一会儿reducemap 你喜欢它!届时您可能还会喜欢itertools。 非常聪明。不知道作为函数的运算符。

以上是关于Python 列表到按位运算的主要内容,如果未能解决你的问题,请参考以下文章

python-opencv-图像的按位运算

AI基础python:openCV——图像算术运算:按位运算

Python按位运算混淆

python 按位运算符

除了按位否定运算之外,“~”在 python 中还有啥作用? [复制]

Python 运算符Ⅴ