python - 生成可变序列长度的列表排列

标签 python regex algorithm permutation

假设我有一个如下所示的列表:

beast = ['E', 'O', 'R', 'E', 'O', 'S', 'P', 'E', 'P', 'P', 'O', 'R', 'S', 'P', 'O', 'E']

现在,这里是我要提取的基本模式:

basic_oros = ['O', 'R', 'O']

pi_poro = ['P', 'O', 'R', 'O']

pi_orpo = ['O', 'R', 'P', 'O']

pi_porpo = ['P', 'O', 'R', 'P', 'O']

si_orso = ['O', 'R', 'S', 'O']

spi_orspo = ['O', 'R', 'S', 'P', 'O']

spi_porso = ['P', 'O', 'R', 'S', 'O']

spi_porspo = ['P', 'O', 'R', 'S', 'P', 'O']

问题是,如果我只提取 ['P', 'O', 'R', 'S', 'P', 'O']来自 beast ,我错过了之前的P在该模式出现之前。

(更好的例子 - 也可以是 ['O', 'O', 'R', 'O', 'O', 'O'] )

因此,这些基本模式中的每个字母都可以在以下意义上进行扩展:

Os can occur together thrice.

Ps can occur together twice.

Rs can occur together twice.

Ss can occur only once.

我想生成所有可能排列的列表,但不知道从哪里开始。

我写了一个简单的 python 代码,用三个 O 等替换了每个 O 的出现。但这导致 -

['O', 'O', 'O', 'R' 'O', 'O', 'O']

当我需要查找时,这将不起作用: ['O', 'R', 'O', 'O']

感谢任何帮助。谢谢。

最佳答案

这听起来像是正则表达式的工作。如果您使用 ''.join(beast) 将您的 beast 列表加入到一个字符串中,您可以构建正则表达式来搜索匹配特定模式的子字符串。例如,使用 {m,n} 量词来搜索某个子模式的特定次数的重复,您可以使用

re.search(r'O{1,3}R{1,2}O{1,3}', ''.join(beast))

搜索由 1 到 3 个 O、1 到 2 个 R 和另外 1 到 3 个 O 组成的模式。

参见 re module documentation有关 Python 的正则表达式语法和函数的更多信息,请参阅任意数量的在线教程以帮助习惯编写正则表达式。

关于python - 生成可变序列长度的列表排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46737964/

相关文章:

algorithm - 需要帮助理解这个动态编程解决方案

python - 如何将目录永久 append 到 PYTHONPATH?

python - python 中的负零

regex - 与顺序无关的正则表达式 - 有可能吗?

python - 人员匹配程序或算法

algorithm - 渐近增长 : Understanding the specific proof of f(n) + little o(f(n)) = theta (f(n))?

python - subprocess.popen 和 subprocess.run 有什么区别

python - 有没有办法在读取 csv 文件后删除它们?

Java - 匹配字符串中的特定URL

ios - ios中的正则表达式删除href链接