如何使用滑动窗口迭代器获取子字符串列表



我正在尝试从字符串中获取给定长度的子字符串列表。

例如,如果我有一个字符串

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)

最新更新