Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成可变序列长度的列表置换_Python_Regex_Algorithm_Permutation - Fatal编程技术网

Python 生成可变序列长度的列表置换

Python 生成可变序列长度的列表置换,python,regex,algorithm,permutation,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', '

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

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']
问题是,如果我只从
beast
中提取
['p','O','R','S','p','O']
,我就错过了该模式出现之前的
p

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

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

操作系统可以同时发生三次

Ps可以同时出现两次

Rs可以同时发生两次

Ss只能发生一次

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

我编写了一个朴素的python代码,用三个操作系统等替换了每次出现的O,但结果是-

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

当我需要找到以下内容时,这将不起作用:
['O','R','O','O']


感谢您的帮助。谢谢。

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

re.search(r'O{1,3}R{1,2}O{1,3}', ''.join(beast))
搜索由1到3个操作系统、1到2个Rs和1到3个以上操作系统组成的模式


有关Python正则表达式语法和函数的更多信息,请参阅,有关如何帮助您习惯编写正则表达式的在线教程,请参阅。

这听起来像是正则表达式的工作。在列表中?我以前从未使用过正则表达式。你不能直接在
beast
中执行正则表达式搜索,但你可以在
'.join(beast)
上执行正则表达式搜索。你能帮助形成正则表达式模式吗?
r'O{1,3}r{1,2}O{1,3}
例如,对于
基本的oros