我正在尝试从字符串中获取给定长度的子字符串列表。
例如,如果我有一个字符串
word = "PYTHON"
并且指定的子字符串长度4
,如何获取以下列表?
['PYTH', 'YTHO', 'THON']
<小时 />这是我的尝试:
size = 4
win = []
word = "PYTHON"
i = iter(word)
for x in range(0,size):
win.append(next(i))
print(win)
for e in i:
win = win[1:] + [e]
print(win)
似乎你想要一个滑动窗口。 请考虑more_itertools
第三方工具
import more_itertools as mit
word = "PYTHON"
["".join(w) for w in mit.windowed(word, 4)]
# ['PYTH', 'YTHO', 'THON']
您可以在代码中使用join
操作来打印所需的字符串。例:-
size = 4
win = []
word = "PYTHON"
final_list = []
i = iter(word)
for x in range(0,size):
win.append(next(i))
final_list.append(''.join(win))
for e in i:
win = win[1:] + [e]
final_list.append(''.join(win))
print (final_list)
>>['PYTH', 'YTHO', 'THON']
你可以这样做
size = 4
win = []
word = "PYTHON"
for i in range(0, len(word)-size + 1):
win.append(word[i:i+size])
print(win)
或者将列表理解为
size = 4
word = "PYTHON"
win = [word[i:i+size] for i in range(0, len(word)-size + 1)]
print(win)
您可以尝试此方法:
word = "PYTHON"
print([word[i:i+4] for i in range(0,len(word),1) if len(word[i:i+4])==4])
输出:
['PYTH', 'YTHO', 'THON']
或者您也可以尝试递归方法:
word = "PYTHON"
def recursive_approach(data,window_size,final_result=[]):
if len(data[:4])==window_size:
final_result.append(data[:4])
return recursive_approach(data[1:],4)
return final_result
print(recursive_approach(word,4))
输出:
['PYTH', 'YTHO', 'THON']
尝试不使用 [] 并将它们替换为 "。
size = 4
win = []
word = "PYTHON"
i = iter(word)
for x in range(0,size):
win.append(next(i))
print(win)
for e in i:
win = win[1:] + "e"
print(win)