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

2024-06-07 06:33:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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']

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

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', 'R' 'O', 'O', 'O']

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

感谢您的帮助。多谢各位


Tags: spi列表basicpicantogethersitwice
1条回答
网友
1楼 · 发布于 2024-06-07 06:33:20

这听起来像是正则表达式的工作。如果将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正则表达式语法和函数的更多信息,请参阅^{} module documentation,有关习惯编写正则表达式的帮助,请参阅任意数量的在线教程

相关问题 更多 >