如何拆分两个字符列表中的单词
How to split a word in list of two characters
我有一句话:HAPPY
我想使用 python.
像这样拆分 HAPPY 这个词 {"HA", "AP", "PP", "PY"}
我试过这个功能:
itertools.combinations("HAPPY", 2)
这为我找到了 HAPPY 这个词的所有可能组合,但我不想要。我只想找到字符之间的所有转换。
我会感谢任何建议。提前致谢!
您可以使用正则表达式:
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)]
我有一句话:HAPPY 我想使用 python.
像这样拆分 HAPPY 这个词 {"HA", "AP", "PP", "PY"}我试过这个功能:
itertools.combinations("HAPPY", 2)
这为我找到了 HAPPY 这个词的所有可能组合,但我不想要。我只想找到字符之间的所有转换。
我会感谢任何建议。提前致谢!
您可以使用正则表达式:
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)]