如何在两个字符列表中分割一个单词

如何在两个字符列表中分割一个单词

问题描述:

我有一个单词:HAPPY 我想使用python将这个单词{“HA”,“AP”,“PP”,“PY”}分开。如何在两个字符列表中分割一个单词

我试过功能:

itertools.combinations("HAPPY", 2) 

此找到我从字HAPPY,我不希望所有可能的组合。我只想找到角色之间的所有转换。

我会appraciate任何建议。先谢谢你!

您可以使用正则表达式:

import re 

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

Python demo

(?=(..))模式找到一个位置,接着用比换行字符以外的任何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 

online test

+0

的OP建议他们希望有一个'set'输出(虽然我真的不相信他们的话) –

+0

对于它的价值,如果我碰到这在源代码中,我不知道它在做什么。列表理解的答案是IMO,更容易理解。 –

+0

谢谢你的答案。我清楚地同意,列表理解更容易理解。但我的问题是,哪一个更好地解决性能问题? – Proma

快速和肮脏的列表理解

[("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)]