使用假设生成具有自定义值限制的列表列表

2023-12-22

故事:

目前,我有一个正在测试的功能,需要整数列表的列表遵循以下规则:

  1. 子列表的数量(我们称之为N) 可以是 1 到 50
  2. 子列表内的值的数量对于所有子列表(矩形形式)都是相同的,并且应该 >= 0 且
  3. 子列表内的值不能大于或等于子列表的总数。换句话说,子列表中的每个值都是一个整数 >= 0 且 N

有效输入示例:

[[0]]
[[2, 1], [2, 0], [3, 1], [1, 0]]
[[1], [0]]

无效输入示例:

[[2]]  # 2 is more than N=1 (total number of sublists)
[[0, 1], [2, 0]]  # 2 is equal to N=2 (total number of sublists)

我正在尝试接近它基于属性的测试并生成不同的有效输入hypothesis library http://hypothesis.readthedocs.io/en/latest/index.html并试图把我的头绕过去lists() and integers(),但无法使其工作:

  • 条件 #1 很容易实现lists() and min_size and max_size论点
  • 条件 #2 包含在Chaining strategies together http://hypothesis.readthedocs.io/en/latest/data.html#chaining-strategies-together
  • 条件 #3 是我正在努力解决的问题 - 因为,如果我们使用rectangle_lists从上面的示例中,我们没有引用内部“父”列表的长度integers()

问题:

如何限制子列表内的整数值小于子列表的总数?


我的一些尝试:

from hypothesis import given
from hypothesis.strategies import lists, integers

@given(lists(lists(integers(min_value=0, max_value=5), min_size=1, max_size=5), min_size=1, max_size=50))
def test(l):
    # ...

这远远不能满足要求 - 列表并不是严格的矩形形式,生成的整数值可以超过列表的生成大小。

from hypothesis import given
from hypothesis.strategies import lists, integers

@given(integers(min_value=0, max_value=5).flatmap(lambda n: lists(lists(integers(min_value=1, max_value=5), min_size=n, max_size=n), min_size=1, max_size=50)))
def test(l):
    # ...

在这里,#1 和 #2 是满足要求的,但整数值可以大于列表的大小 - 不满足要求 #3。


当尝试解决这样棘手的约束时,有一种很好的通用技术通常很有用:尝试构建一些看起来有点像您想要的但不满足所有约束的东西,然后将其与修改它的函数组合(例如通过丢弃坏的部分或修补不太有效的部分)以使其满足约束。

对于您的情况,您可以执行以下操作:

from hypothesis.strategies import builds, lists, integers

def prune_list(ls):
    n = len(ls)
    return [
       [i for i in sublist if i < n][:5]
       for sublist in ls
    ]

limited_list_strategy = builds(
   prune_list,
   lists(lists(integers(0, 49), average_size=5), max_size=50, min_size=1)
)

在此我们:

  1. 生成一个看起来大致正确的列表(它是一个整数列表的列表,并且整数与所有整数的范围相同)possible可能有效的索引)。
  2. 从子列表中删除任何无效索引
  3. 截断其中仍包含 5 个以上元素的任何子列表

结果应该满足您所需的所有三个条件。

Average_size 参数并不是严格必要的,但在对此进行实验时,我发现它有点太容易生成空子列表。

预计到达时间:抱歉。我刚刚意识到我误读了您的条件之一 - 这实际上并没有达到您想要的效果,因为它不能确保每个列表的长度相同。这是一种修改此问题以解决该问题的方法(它变得有点复杂,因此我已改用复合而不是构建):

from hypothesis.strategies import composite, lists, integers, permutations


@composite
def limisted_lists(draw):
    ls = draw(
        lists(lists(integers(0, 49), average_size=5), max_size=50, min_size=1)
    )
    filler = draw(permutations(range(50)))
    sublist_length = draw(integers(0, 5))

    n = len(ls)
    pruned = [
       [i for i in sublist if i < n][:sublist_length]
       for sublist in ls
    ]

    for sublist in pruned:
        for i in filler:
            if len(sublist) == sublist_length:
               break
            elif i < n:
               sublist.append(i)
    return pruned

我们的想法是,我们生成一个“填充”列表,它提供子列表外观的默认值(因此它们会朝着彼此更相似的方向收缩),然后绘制要修剪的子列表的长度获得一致性。

我承认这非常复杂。您可能想使用 RecursivelyIronic 的基于平面地图的版本。我更喜欢这个的主要原因是它会更好地收缩,所以你会从中得到更好的例子。

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

使用假设生成具有自定义值限制的列表列表 的相关文章

  • Matplotlib 标准化颜色条 (Python)

    我正在尝试使用 matplotlib 当然还有 numpy 绘制轮廓图 它有效 它绘制了它应该绘制的内容 但不幸的是我无法设置颜色条范围 问题是我有很多图 并且需要所有图都具有相同的颜色条 相同的最小值和最大值 相同的颜色 我复制并粘贴了在
  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 在 Python 中使用 XPath 和 LXML

    我有一个 python 脚本 用于解析 XML 并将某些感兴趣的元素导出到 csv 文件中 我现在尝试更改脚本以允许根据条件过滤 XML 文件 等效的 XPath 查询将是 DC Events Confirmation contains T
  • Python 中的六边形自组织映射

    我在寻找六边形 自组织映射 http en wikipedia org wiki Self organizing map在Python上 准备好模块 如果存在的话 绘制六边形单元格的方法 将六边形单元作为数组或其他方式使用的算法 About
  • Python 中 genfromtxt() 的可变列数?

    我有一个 txt具有不同长度的行的文件 每一行都是代表一条轨迹的一系列点 由于每条轨迹都有自己的长度 因此各行的长度都不同 也就是说 列数从一行到另一行不同 据我所知 genfromtxt Python 中的模块要求列数相同 gt gt g
  • 使用正则表达式解析 Snort 警报文件

    我正在尝试使用 Python 中的正则表达式从 snort 警报文件中解析出源 目标 IP 和端口 和时间戳 示例如下 03 09 14 10 43 323717 1 2008015 9 ET MALWARE User Agent Win9
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • 使用 genfromtxt 导入 numpy 中缺失值的 csv 数据

    我有一个 csv 文件 看起来像这样 实际文件有更多的列和行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 假设文件的名称是info csv如果我尝试使用导入它 data numpy genfromtxt i
  • Python unicode 字符代码?

    有没有办法将 Unicode 字符 插入 Python 3 中的字符串 例如 gt gt gt import unicode gt gt gt string This is a full block s unicode charcode U
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • 在 pip.conf 中指定多个可信主机

    这是我尝试在我的中设置的 etc pip conf global trusted host pypi org files pythonhosted org 但是 它无法正常工作 参考 https pip pypa io en stable
  • 与 White 的集成测试[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有人有白色框架的经验吗 www co
  • 在pycharm中调试python代码

    这个问题类似于this https stackoverflow com questions 10240018 how to use pycharm to debug python script一 我正在尝试调试pyethapp https
  • 是否可以写一个负的python类型注释

    这可能听起来不合理 但现在我需要否定类型注释 我的意思是这样的 an int Not Iterable a string Iterable 这是因为我为一个函数编写了一个重载 而 mypy 不理解我 我的功能看起来像这样 overload
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 使用 Keras 和 fit_generator 绘制 TensorBoard 分布和直方图

    我正在使用 Keras 使用 fit generator 函数训练 CNN 这似乎是一个已知问题 https github com fchollet keras issues 3358TensorBoard 在此设置中不显示直方图和分布 有
  • 使用“pythonw”(而不是“python”)运行应用程序时找不到模块

    我尝试了这个最小的例子 from flask import Flask app Flask name app route def hello world return Hello World if name main app run deb
  • 从时间序列生成日期特征

    我有一个数据框 其中包含如下列 Date temp data holiday day 01 01 2000 10000 0 1 02 01 2000 0 1 2 03 01 2000 2000 0 3 30 01 2000 200 0 30
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们

随机推荐

  • 无法在实际设备上使用 .fileImporter 打开文件

    当我测试 iOS 14 beta 时 此功能在部署在真实设备上时可以工作 但现在在生产中它只能在模拟器上工作 iOS 14 有什么变化吗 我收到以下错误 FilePickerTest 15486 5885508 AXRuntimeCommo
  • 无法将图像推送到谷歌容器注册表 - 调用者没有权限“storage.buckets.get”

    我正在开发一个 bitbucket 管道 用于将图像推送到 gc 容器注册表 我创建了一个具有存储管理员角色的服务帐户 电子邮件受保护 cdn cgi l email protection gcloud auth activate serv
  • 在 Visual C# Express 中使用多个解决方案的良好实践

    背景 我的团队由 3 名相当缺乏经验的开发人员组成 我们正在为我们公司开发内部软件 目前我们有许多较小且独立的解决方案 其中许多是相互依存的 目前 这些依赖关系是通过引用相应发布文件夹中的输出 dll 来实现的 通过手动重建依赖的解决方案来
  • 此弃用警告是什么意思以及如何解决它?

    当我使用 pip 21 1 安装本地 python 包时 pip install 我收到弃用警告 DEPRECATION A future pip version will change local packages to be built
  • 向下滚动时隐藏 div [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我只想在向下滚动时隐藏图像并显示另一张图像 当滚动到页面顶部时 需要显示第一个图像 需要隐藏其他图像 我尝试使用这段代码 This is t
  • IBM MQ 消息监听器

    您好 有谁知道如何使用 IBM MQ 创建消息监听器 我知道如何使用 JMS 规范来做到这一点 但我不确定如何为 IBM MQ 做到这一点 非常感谢任何链接或指针 虽然前面的响应者指出有一个 WMQ Java API 但 WMQ 也支持 J
  • 如何在 symfony2 服务中执行 $this->render() ?

    我在普通的 symfony2 控制器中有这段代码 temp this gt render BizTVArchiveBundle ContentTemplate content i template view html twig array
  • Postgres 中的递归查询和求和

    我必须在数据库中存储很多项目 每个项目都可以有子项目 该结构看起来像一棵树 Project ProjectChild1 ProjectChild2 ProjectChild n ProjectChildOfChild1 ProjectChi
  • 谷歌地图错误:InvalidKeyOrUnauthorizedURLMapError

    我正在用 JavaScript HTML CSS 开发一个使用 Google 地图的应用程序 我收到以下警报对话框 此页面无法显示 Google 地图元素 提供的 Google API 密钥无效或该网站无权使用它 错误代码 InvalidK
  • 滚动视图内的粘性组件

    我正在尝试构建一个像这个应用程序一样的粘性组件 http www screencapture ru file E88F08Fc http www screencapture ru file E88F08Fc 交易 产品 事件选项卡 segm
  • 尝试使用 powershell 从网络链接下载 zip 文件

    好的 我正在尝试从我们与 powershell 一起使用的 Web 链接下载文件 我正在下载一个 zip 文件 其中名称的开头始终相同 但中间部分会根据 zip 的版本号而变化 当我使用完全限定的网址并将文件名硬编码到脚本中时 我就能够下载
  • 网站图标必须为 32×32 或 16×16 吗?

    我想使用单个图像作为常规图标和 iPhone iPad 友好图标 这可能吗 如果作为常规浏览器图标链接 iPad 友好的 72 72 PNG 会缩放吗 或者我是否必须使用单独的 16 16 或 32 32 图像 2020 年更新 坚持 16
  • Chart.js:仅在 x 轴上显示数据点的标签

    I m making a chart by using Chart js and have a problem regarding the x axis of my line chart I have made a multi line c
  • 有办法创建这个流序列吗?

    我正在尝试实现这个弹珠图 其假设是有 N 个 sN 并且我将此流添加到 main 中 s1 1 99 gt s2 3 7 gt main 1 1 3 1 7 99 7 gt 现在我有一个近似值 但是有 重复 const main new R
  • 切换到 Xcode 6 Beta 5 后所有 IBOutlet 都变为 nil

    例如 视图控制器中有一个属性 IBOutlet weak var nameLabel UILabel 此属性是nil inside viewWillAppear and viewDidLoad 因此应用程序在运行时崩溃 它在 Xcode 6
  • 使用 psycopg2 执行 SQL 查询

    我正在尝试使用 psycopg2 将列表传递到 postgres 表中 我不断遇到异常 File c Python27 Projects Newsletter newsletter py line 148 in
  • 正则表达式不允许电子邮件中的任何位置出现空格

    我正在尝试使用正则表达式验证电子邮件地址 这样如果在电子邮件中的任何位置添加空格 它就会引发错误 我当前使用的正则表达式是这样的
  • Mac 上的 ActionScript 开发

    我知道适用于 Windows 的 FlashDevelop 但是在 Mac 上开发 ActionScript 或 haxe 怎么样 除了 eclipse flex builder 和 FDT 的 Flex 插件之外 还有什么好的 IDE 可
  • 我如何在 dhall 中表示一个元组?

    我想在 dhall 中表示 IPv4 地址 这样我就可以管理我的主机配置 默认情况下 它保存为文本 但这显然不能令人满意 因为它允许任何旧文本被漏掉 我想将这些值保留为 8 位值的 4 元组 我认为 Dhall 本身不允许这样做 我能看到的
  • 使用假设生成具有自定义值限制的列表列表

    故事 目前 我有一个正在测试的功能 需要整数列表的列表遵循以下规则 子列表的数量 我们称之为N 可以是 1 到 50 子列表内的值的数量对于所有子列表 矩形形式 都是相同的 并且应该 gt 0 且 子列表内的值不能大于或等于子列表的总数 换