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

Python 如何在两个字符的列表中拆分单词,python,regex,transitions,Python,Regex,Transitions,我有一句话:快乐 我想用python将单词HAPPY拆分为{“HA”、“AP”、“PP”、“PY”} 我尝试了以下功能: itertools.combinations("HAPPY", 2) 这让我找到了快乐这个词中所有可能的组合,我不想要。我只想找到角色之间的所有转换 我将接受任何建议。提前谢谢你 您可以使用正则表达式: import re s = 'HAPPY' print(re.findall(r'(?=(..))', s)) // => ['HA', 'AP', 'PP', '

我有一句话:快乐 我想用python将单词HAPPY拆分为{“HA”、“AP”、“PP”、“PY”}

我尝试了以下功能:

itertools.combinations("HAPPY", 2)
这让我找到了快乐这个词中所有可能的组合,我不想要。我只想找到角色之间的所有转换

我将接受任何建议。提前谢谢你

您可以使用正则表达式:

import re

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

该模式找到一个位置,后跟除换行符以外的任何2个字符,并捕获这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

请参阅快速脏名单

[("HAPPY")[i:i+2] for i in range(0,len("HAPPY")-1)]

使用列表理解获取字符串中的所有两个字符片段

string = "HAPPY"
[string[idx:idx+2] for idx in range(len(string))]

你可以这样做:

word = 'HAPPY'
combos = [word[i:i+2] for i in range(len(word) - 1)]

OP建议他们需要一个
输出(尽管我并不相信他们),如果我在源代码中遇到这个问题,我将不知道它在做什么。在我看来,清单上的理解答案更容易理解。谢谢你的快速回答。我很清楚地同意列表理解更容易理解。但我的问题是,对于性能问题,哪一个是更好的解决方案?@Proma:理解应该更快。