获取 3 个连续数字的所有重叠匹配项的列表

问题描述

'123456789' 我想找到 3 consecutive numbers 的所有(重叠)匹配:

ListIWant = [123,234,345,456,567,678,789]

我试过了:

print(re.compile(r"(\d){3}").findall('123456789'))

我目前得到的输出

['3','6','9']

而且我还想知道是否有更有效的方法计算匹配次数而不是使用 len(ListIWant)

我也在学习英语,如果你在这个地方纠正或建议我更好的词/方式来表达自己,我将不胜感激。

解决方法

使用理解来构建您的列表:

s = '123456789'
w = 3  # window size
l = [int(s[i:i+3]) for i in range(len(s) - w + 1)]
>>> l
[123,234,345,456,567,678,789]
,
a= '123456789'
ListIWant = []
for i,ele in enumerate(a):
    if i < len(a)-3:
        if (int(a[i+1]) == int(ele)+1) and (int(a[i+2]) == int(ele) + 2):
            ListIWant.append(int(ele+a[i+1]+a[i+2]))

    else:
        if (int(a[i+1]) == int(ele)+1) and (int(a[i+2]) == int(ele) + 2):
            ListIWant.append(int(ele+a[i+1]+a[i+2]))
        break

输出:

[123,789]