gpt4 book ai didi

Python 的“Look-And-Say” 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:03 34 4
gpt4 key购买 nike

我正在尝试为 Look-and-Say 编写一个正则表达式python 中的序列。这个想法是将给定的字符串分割成相同数字的子字符串。经过反复试验,我得到了'((\d)\\2*)'

对于模式11244455221116,这给出[('11', '1'), ('2', '2'), ('444', '4'), ('55', '5'), ('22', '2'), ('111', '1'), ('6', '6')] 如预期。这可行,但看起来很笨拙。有没有更干净的方法来做到这一点,无论有没有正则表达式?

最佳答案

您可以使用itertools.groupby :

import itertools as IT

text = '11244455221116'
print([(''.join(group), key) for key, group in IT.groupby(text)])

产量

[('11', '1'), ('2', '2'), ('444', '4'), ('55', '5'), ('22', '2'), ('111', '1'), ('6', '6')]

但是re.findall更快:

In [67]: %timeit [(''.join(group), key)for key, group in IT.groupby(text*100)]
1000 loops, best of 3: 528 us per loop

In [68]: %timeit re.findall(r'((\d)\2*)', text*100)
1000 loops, best of 3: 219 us per loop

关于Python 的“Look-And-Say” 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17869447/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com