我有一個單詞:HAPPY 我想使用python將這個單詞{「HA」,「AP」,「PP」,「PY」}分開。如何在兩個字符列表中分割一個單詞
我試過功能:
itertools.combinations("HAPPY", 2)
此找到我從字HAPPY,我不希望所有可能的組合。我只想找到角色之間的所有轉換。
我會appraciate任何建議。先謝謝你!
我有一個單詞: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']
的(?=(..))
模式找到一個位置,接着用比換行字符以外的任何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建議他們希望有一個'set'輸出(雖然我真的不相信他們的話) –
對於它的價值,如果我碰到這在源代碼中,我不知道它在做什麼。列表理解的答案是IMO,更容易理解。 –
謝謝你的答案。我清楚地同意,列表理解更容易理解。但我的問題是,哪一個更好地解決性能問題? – Proma