python - 检查 python 列表是否遵循特定的重复模式

标签 python testing pattern-matching

我有一个只包含两个符号的 python 列表,假设它们是 ab,列表如下所示:

l = ['a','b','a','b','a','b','a','b','a','b','a','b','a','b','a','b']

现在在我的应用程序中,我有数千个这样的列表,它们的长度各不相同(通常有几百长)。但它们的共同点是它们具有重复模式 (a,b)。例如,此列表已损坏:

l_broken = ['a','b','b','a','a','b','a','b','a','a','a','b','a','b','b','a']

任何偏离 l 中的 a,b 重复模式的东西都必须被认为是损坏的。即使列表的长度不均匀,它也会被破坏。所以这一定是一个非常严格的测试。但本质上,如果列表 l 的长度为 N 那么这意味着 (a,b) 必须重复 N/2 次。符号 ab 是唯一会出现在这些列表中的东西,所以不需要检查它,因为它在这个应用程序中是不可想象的,因为任何其他东西都可以被看见。

我应该说它们都应该第一个模式。我正在寻找一种有效的方法,一种测试,它可以确定每个列表实际上都具有这种重复模式。如果没有抛出错误或类似的东西

assert my_fancy_test(l), 'the list does not follow the correct pattern'

我想我正在寻找子序列匹配,但我的谷歌搜索结果不足。

编辑:

感谢大家提供出色的解决方案。我不知道你甚至可以做其中的一半。好东西。我在最后添加了一个简短的性能概述供您细读。

最佳答案

性能

测试列表:l = ['a','b']*100000

RomanPerekhrest的解决方案:

CPU times: user 636 µs, sys: 0 ns, total: 636 µs
Wall time: 639 µs

GZ0的回答:

CPU times: user 14.6 ms, sys: 78 µs, total: 14.7 ms
Wall time: 13.9 ms

Silveris ' 回答:

CPU times: user 95.2 ms, sys: 3.95 ms, total: 99.1 ms
Wall time: 98 ms

h4z3的回答:

CPU times: user 39.9 ms, sys: 0 ns, total: 39.9 ms
Wall time: 38.6 ms

tituszban的回答:

CPU times: user 2.71 ms, sys: 46 µs, total: 2.76 ms
Wall time: 2.76 ms

ruso_ro1回答:

CPU times: user 32.4 ms, sys: 3.35 ms, total: 35.8 ms
Wall time: 34.7 ms

Elias Strehle

CPU times: user 11.7 ms, sys: 0 ns, total: 11.7 ms
Wall time: 12.1 ms

关于python - 检查 python 列表是否遵循特定的重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58116546/

相关文章:

python - django 数据库更新值

python - Twisted:禁用 Twisted 框架类的日志记录

django 测试 RequestFactory 不包含 request.user

selenium - Gherkin 机器人框架中的场景概述

functional-programming - 函数式语言中的 'Pattern Matching' 是什么?

Python:如何使用Python生成随机稀疏对称矩阵?

javascript - 未调用 AJAX 成功回调函数

python - 使用 np.testing 测试非严格不等式

linux - 在 UNIX 中捕获模式的值并写入另一个文件

python - 如何判断一个字符串是否在 Python 中重复?