假设我有一个如下所示的列表:
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/