大学で行っているプログラミングの問題で「連続する整数値の中に出現する「7」がいくつあるかを数えてください。」という問題が出題されました。

例えば[7, 99]なら、「1,2,3,4,5,6,7」 と 「1,2,3,...,97,98,99」の数字の中にいくつ7が出現するかというもので、7なら1、99なら20という答えになります。
777が2個出現するので2個とカウントする。)
よって答えは[1, 20]という結果を1秒以内に表示しないといけないというのが課題です。

しかし、[99, 77777, 23678947, 732465890, 1912478368]この桁になると、処理速度が遅くて1秒を超えてしまい不可となってしまいます。
処理速度を早くするためにはどうすればよいでしょうか?Pythonでは限界があるのでしょうか?
コツとかがあれば是非教えてください!

import re
v = [99,77777,23678947,732465890,1912478368]
try:
    while True:
        v.append(input())
except EOFError:
    pass

for o in range(len(v)):
    x = v[o]
    z = []
    b = []
    d = 0
    w = int(x)

    for s in range(1,w+1):
        matchOB = re.findall("7",str(s))
        if matchOB:
            d += len(matchOB)

print(d)