如何在两个字符的列表中拆分单词

Pro*_*oma 2 python regex transitions

我有一句话:快乐我想用python将这个单词分成HAPPY这样的{"HA","AP","PP","PY"}.

我试过这个功能:

itertools.combinations("HAPPY", 2)
Run Code Online (Sandbox Code Playgroud)

这找到了HAPPY这个我不想要的所有可能的组合.我想要的只是找到角色之间的所有过渡.

我会评估任何建议.先感谢您!

Wik*_*żew 5

你可以使用正则表达式:

import re

s = 'HAPPY'
print(re.findall(r'(?=(..))', s))
// => ['HA', 'AP', 'PP', 'PY']
Run Code Online (Sandbox Code Playgroud)

请参阅Python演示

(?=(..))模式找到一个位置,后跟除了换行符之外的任何2个字符,并捕获这两个字符.然后,正则表达式引擎前进到下一个位置并再抓取两个字符,依此类推.

至于性能,如果你编译正则表达式,性能差异不是那么大,但理解应该更快一点:

import re
import time

s = 'HAPPY'
rx = re.compile(r'(?=(..))', re.DOTALL)

def test_regex():
    return rx.findall(s)

def test_comprehension():
    return [(s)[i:i+2] for i in range(0,len(s)-1)]

n = 10000
t0 = time.time()
for i in range(n): test_regex()
t1 = time.time()
print('regex: {}'.format(t1-t0))

t0 = time.time()
for i in range(n): test_comprehension()
t1 = time.time()
print('comprehension: {}'.format(t1-t0))
# => regex: 0.00773191452026
# => comprehension: 0.00626182556152
Run Code Online (Sandbox Code Playgroud)

查看在线测试