解析和计算布尔集定义

2024-04-05

说我有一套S定义为字符串,例如如下:

S = '(A or B) and not(A and C)'

其中 A、B 和 C 是有限集,例如:

A = {0, 1}
B = {0, 2}
C = {1, 3}

如果我们分析S一步一步,我们有:

(A or B)   = {0, 1, 2}
(A & C)    = {1}
not(A & C) = {0, 2, 3}

这给了我们最终结果:

S = {0,2}

我如何计算元素S给出其作为一般布尔公式的定义?

我不太知道如何开始解决这个问题。一方面,我想知道是否需要使用完整的词法分析器。另外,经过一番阅读后,我还发现了两个似乎高度相关的概念,但不知道它们如何应用:

  • 规范范式 http://en.wikipedia.org/wiki/Canonical_normal_form
  • 德摩根定律 http://en.wikipedia.org/wiki/De_Morgan%27s_laws

如果您愿意进行改造,则无需编写自己的解析器S到适合使用的字符串eval() http://docs.python.org/2.7/library/functions.html#eval。改变S from '(A or B) and not(A and C)'转化为等价的T使用Python的in-操作员'(x in A or x in B) and not(x in A and x in C)'.

通过循环元素域并测试它们是否与上面的表达式匹配来计算结果。 这是交互式提示下的一个已解决的示例:

>>> T = '(x in A or x in B) and not(x in A and x in C)'
>>> sets = {'A': {0, 1}, 'B': {0, 2}, 'C': {1, 3}}
>>> universe = {x for s in sets.values() for x in s}
>>> {x for x in universe if eval(T, sets, {'x': x})}
set([0, 2])

要自动进行转换,请为集合变量创建一个命名空间,其中变量查找执行集合成员资格测试。将它们放在一起为您提供了一个简单而干净的集合表达式求值器:

class SetVariables(dict):
    'Transform a variable lookup into a membership test'
    def __getitem__(self, var):
        s = dict.__getitem__(self, var)
        return self.x in s

def set_eval(expr, **sets):
    'Evaluation a set expression for the given sets'
    universe = {x for s in sets.values() for x in s}
    expr = compile(expr, '', 'eval')
    variables = SetVariables(sets)
    results = set()
    for x in universe:
        variables.x = x
        if eval(expr, {}, variables):
            results.add(x)
    return results

if __name__ == '__main__':
    print set_eval(expr = '(A or B) and not(A and C)',
                   A = {0, 1},
                   B = {0, 2},
                   C = {1, 3}
                  )

希望这能解决您的问题并使您不必编写自己的解析器:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析和计算布尔集定义 的相关文章

  • Spark MLlib - 训练隐式警告

    我在使用时不断看到这些警告trainImplicit WARN TaskSetManager Stage 246 contains a task of very large size 208 KB The maximum recommend
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • Scikit-learn 的内核 PCA:如何在 KPCA 中实现各向异性高斯内核或任何其他自定义内核?

    我目前正在使用Scikit learn 的 KPCA https scikit learn org stable modules generated sklearn decomposition KernelPCA html对我的数据集执行降
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • Pyspark 数据框逐行空列列表

    我有一个 Spark 数据框 我想创建一个新列 其中包含每行中具有 null 的列名称 例如 原始数据框是 col 1 col 2 col 3 62 45 null 62 49 56 45 null null null null null
  • 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制]

    这个问题在这里已经有答案了 Flask 的 hello world 演示是 from flask import Flask app Flask name app route def hello return Hello World if n
  • 杂乱的扭曲连接在不干净的时尚中消失了。没有代理。已经尝试过标题

    我正在尝试抓取这个网站 https www5 apply2jobs com jupitermed ProfExt index cfm fuseaction mExternal searchJobs https www5 apply2jobs
  • 在Python中删除带有重音符号的字符串中的所有非字母字符

    我正在尝试使用 Python 3 7 从包含重音符号的字符串中删除所有非字母字符 空格除外 我尝试了以下方法 import re text 29 1981 4 2008 clean text re sub W d text print cl
  • 对文本变量进行数学求和? (例如 5865/100 )

    我有一个变量是 whatever 5865 100 这是一个文本变量 我希望它计算 5865 100 以便我可以将其添加到其他数字并进行计算 Number format 不起作用 因为它只返回 5 865 而我希望它返回 58 65 我可以
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • numpy.cov() 返回意外的输出

    我有一个 X 数据集 有 9 个特征和 683 行 683x9 我想获取这个 X 数据集和另一个与 X 具有相同形状的数据集的协方差矩阵 我使用np cov originalData generatedData rowvar False 代
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 为什么 bot.get_channel() 会产生 NoneType?

    我正在制作一个 Discord 机器人来处理公告命令 当使用该命令时 我希望机器人在特定通道中发送一条消息 并向用户发送一条消息以表明该命令已发送 但是 我无法将消息发送到频道 我尝试了这段代码 import discord import
  • 获取调用者文件的绝对路径

    假设我在不同的目录中有两个文件 1 py 比如说 在C FIRST FOLDER 1 py and 2 py 比如说 在C SECOND FOLDER 2 py 文件1 py进口2 py using sys path insert 0 pa
  • scipysolve_ivp() 中的访问时间步长

    我有一个常微分方程系统 正在使用 scipy 的solve ivp 函数求解 它运行良好 但我在访问每个步骤中使用的时间步时遇到问题 我知道solve ivp 将当前时间传递给用户定义的函数 但我需要使用的时间步长 而不是当前时间 为了解决
  • 如何在 JavaScript 中获取浮点数的小数位?

    我想要的是与 Number prototype toPrecision 几乎相反的 这意味着当我有数字时 它有多少位小数 例如 12 3456 getDecimals 4 对于任何想知道如何更快地完成此操作 无需转换为字符串 的人 这里有一
  • 在Python中从日期时间中减去秒

    我有一个 int 变量 它实际上是秒 让我们调用这个秒数X 我需要得到当前日期和时间 以日期时间格式 减去的结果X秒 Example If X是 65 当前日期是2014 06 03 15 45 00 那么我需要得到结果2014 06 03
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • 如何从一条路径中减去另一条路径?

    所以 我有一个基本路径和一个新路径 新路径包含在基本路径中 我需要看看新路径有什么不同 就像我们有 home 一样 新路径是 home apple one 我需要从中获取 apple one 注意 当我从 homePath diffPath
  • Spring @ContextConfiguration 如何为 xml 放置正确的位置

    在我们的项目中 我们正在编写一个测试来检查控制器是否返回正确的模型视图 Test public void controllerReturnsModelToOverzichtpage ModelAndView modelView new Mo
  • 并发程序不同制作方式的差异

    有什么区别 开始一个新线程 使用 TPL 使用后台工作者 所有这些都创建了并发性 但是它们之间的低级差异是什么 无论如何 这 3 个线程都会创建线程吗 Thanks 它们都在内部使用线程 区别在于每个 API 的抽象级别以及线程的使用方式
  • 在 Flask 框架中向用户发送文件会出现 UnicodeEncodeError

    我想在用户单击适当的按钮时向他发送一个文件 并且我正在起诉以下内容 Prepare selected file for download send file home nikos wsgi static files filename 但无论
  • 在不同的服务器上执行相同的 php 脚本的最佳方法是什么?

    我有一个名为 MY SCRIPT 的脚本 由于性能问题 我需要将其上传到不同的服务器 A B 和 C 上 该脚本对于所有服务器都是相同的 减少维护的最佳方法是什么 我在想 你怎么看待这件事 使用部署工具自动将此文件部署到多个服务器 就像是A
  • Facebook OAuth2 中 access_token 的长度是多少?

    我在 Google 和 StackOverflow 上搜索以找到问题的答案 但找不到 我想将 access token 存储到我的数据库中以供离线访问 并且我想确保指定列的正确长度 我什至无法确定它只是一个数字还是数字和字符串的混合 我在
  • Spring 自动添加“X-Total-Count”标头

    我正在为我的 Web 应用程序使用 admin on rest UI 它有以下限制 注意 jsonServer REST 客户端期望 API 包含 响应 GET LIST 调用中的 X Total Count 标头 该值必须 是集合中资源的
  • Android:BLE如何读取多个Characteristic?

    用于读取某些特征的 Android BLE API 方法本质上是异步的 当您请求某些值时 将调用您的 GATT 回调方法 如果您请求多个读取特征值 它只会丢弃其他值 直到它不满足第一个请求为止 如果有人知道我们应该采用哪种设计模式来解决这个
  • 链接时,“获取您需要的内容”和“获取全部”(-Wl,--whole-archive)之间是否存在某种关系?

    我有这个库 其中涉及一些需要在之前运行的静态初始化代码main 如果您只是将所有翻译单元编译在一起 那么一切都很好 但是如果我提供静态库 a文件 并让用户将他们的应用程序链接到它 链接器只是忽略执行静态初始化的符号 或者 我可以让链接器拾取
  • 检查文件夹,然后在 Python 中创建一个隐藏文件夹

    我无法让这个东西为我的一生创建这个隐藏文件夹 它完成时没有任何错误 只是无法让它创建文件夹 import os import ctypes import subprocess import urllib from subprocess im
  • 问:如何从表中排除人名

    我正在尝试使用 bigquery 通过 gdeltv2 数据集查找 4 个以色列新闻网站中被提及最多的 10 个人 我成功获得了被提及最多的 10 个人 现在我想从前 10 名名单中排除两个人 Maccabi Haifa 和 Reuben
  • 故障转移组辅助实例上的 Azure SQL 托管实例 CLE 的解密问题

    我们有一个带有主实例和辅助实例的 Azure SQL 托管实例故障转移组设置 我遇到的问题是我们对某些数据库表列使用单元格 列 级加密 CLE 我有限的理解是 这些的解密取决于服务主密钥 我认为问题在于数据库主密钥使用服务主密钥进行加密 然
  • Mac OS X 上的 Mono - 并行 HTTP 下载限制为 2

    我正在使用 Mono 开发一个可以同时下载多个文件的程序 适用于 Mac OS X 和 Debian 然而 尽管我使用了构造函数 但我只能同时下载 2 个文件new RollingDownload 10 我正在使用的代码是这样的 using
  • 如何改进MySQL中的Limit子句

    我有posts有 10k 行的表 我想通过它创建分页 因此 我为此目的有下一个查询 SELECT post id FROM posts LIMIT 0 10 When I Explain该查询我得到下一个结果 所以我不明白为什么 MySql
  • NetBeans 14 - 无法自动设置 JavaFX 平台

    我多年来一直在研究这个问题 但我发现的所有教程似乎都不起作用 当我尝试使用 JDK 18 和适用于 Windows 的最新 JFX 下载在 Netbeans 14 中创建新的 JavaFX 项目时 https gluonhq com pro
  • 如何在 iOS 4 上获取更新 NSUserDefault?

    我正在开发一个iPhone应用程序 由于多任务 我在iOS4上遇到了问题 此应用程序具有在 Settings bundle 中定义的默认设置 如果我运行我的应用程序 那么我就会离开它 所以它会进入后台 我将更改设置并重新启动应用程序 它退出
  • 根据最后一行的条件触发电子邮件警报“不工作”

    我尝试构建一个脚本 但存在一些问题 表格格式为两列 即日期和值 这些是需求 理想状态 抓住 Google 表格中名为 test 的最后一个填充行 今天的日期 如果 F 列中的值大于 0 5 请检查该行 如果大于 0 5 则触发电子邮件 在电
  • Camel Restlet maxThreads 组件选项

    我有个问题 apache Camel 文档指出 camel restlet 组件 从 2 10 版本开始 可以定义服务请求的最大线程数 http camel apache org restlet html 我该如何指定这个参数 这是我制定的
  • Magrittr 转发管道无法将值转发到 openXL::addWorksheet - “错误...:第一个参数必须是工作簿”

    magrittr似乎无法将 工作簿 类对象通过管道传输到addWorkbook包中的函数openxlsx 别介意为什么我需要使用 excel 哎哟 例如 要写InsectSprays使用 基本 语法将数据集转换为 Excel 文件 libr
  • 解析和计算布尔集定义

    说我有一套S定义为字符串 例如如下 S A or B and not A and C 其中 A B 和 C 是有限集 例如 A 0 1 B 0 2 C 1 3 如果我们分析S一步一步 我们有 A or B 0 1 2 A C 1 not A