Python列表按位运算

Jor*_*ter 9 python django bitwise-operators

有没有办法把Django的查询列表表示(例如Q(first_name="Jordan"),当Qdjango.db.models.Q),并逐位或在一起?

换句话说,我有这样的事情:

search_string = "various search terms"
Run Code Online (Sandbox Code Playgroud)

我想这样做:

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)
Run Code Online (Sandbox Code Playgroud)

其中,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
Run Code Online (Sandbox Code Playgroud)

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

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

Jan*_*hko 19

你可能想要

import operator 
from functools import reduce    # Python 3
search_params = reduce(operator.or_, search_params, Q())
Run Code Online (Sandbox Code Playgroud)

这将|在所有项目之间放置一个比特或()search_params,从空条件开始Q().