11 Added TIO link.
source | link

Python 3.6+, 172 195 156 123 122 121 104 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("\d*",s)[0];n=int(t or n);w=w[:n]+s[len(t):];yield w

Try it online!

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("\d*",s)[0]

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t or n)

will be n if t is empty, and int(t) otherwise.

w=w[:n]+s[len(t):]

removes the number that the regular expression found from s (if there's no number found, it'll remove 0 characters, leaving s untruncated) and replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

Python 3.6+, 172 195 156 123 122 121 104 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("\d*",s)[0];n=int(t or n);w=w[:n]+s[len(t):];yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("\d*",s)[0]

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t or n)

will be n if t is empty, and int(t) otherwise.

w=w[:n]+s[len(t):]

removes the number that the regular expression found from s (if there's no number found, it'll remove 0 characters, leaving s untruncated) and replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

Python 3.6+, 172 195 156 123 122 121 104 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("\d*",s)[0];n=int(t or n);w=w[:n]+s[len(t):];yield w

Try it online!

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("\d*",s)[0]

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t or n)

will be n if t is empty, and int(t) otherwise.

w=w[:n]+s[len(t):]

removes the number that the regular expression found from s (if there's no number found, it'll remove 0 characters, leaving s untruncated) and replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

10 Got help.
source | link

Python 3.6+, 172 195 156 123 122 121121 104 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("(\d*)""\d*",s).group(0);n=int[0];n=int([n,t][t>'']t or n);s=s[len;w=w[:n]+s[len(t):];w=w[:n]+s;yield];yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("(\d*)""\d*",s).group(0)[0]

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t)if t elseor n)

will be n if t is empty, and int(t) otherwise.

s=s[lenw=w[:n]+s[len(t):]

This removes the number that the regular expression found from s. (Ifif there's no number found, it'll remove 0 characters, leaving s untruncated.)

w=w[:n]+s

and replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

Python 3, 172 195 156 123 122 121 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("(\d*)",s).group(0);n=int([n,t][t>'']);s=s[len(t):];w=w[:n]+s;yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("(\d*)",s).group(0)

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t)if t else n

will be n if t is empty, and int(t) otherwise.

s=s[len(t):]

This removes the number that the regular expression found from s. (If there's no number found, it'll remove 0 characters, leaving s untruncated.)

w=w[:n]+s

replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

Python 3.6+, 172 195 156 123 122 121 104 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("\d*",s)[0];n=int(t or n);w=w[:n]+s[len(t):];yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("\d*",s)[0]

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t or n)

will be n if t is empty, and int(t) otherwise.

w=w[:n]+s[len(t):]

removes the number that the regular expression found from s (if there's no number found, it'll remove 0 characters, leaving s untruncated) and replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

9 added 14 characters in body
source | link

Python 3, 172 195 156 123 122122 121 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("(\d*)",s).group(0);n=int(t[n,t][t>''])if t else n;s=s[len;s=s[len(t):];w=w[:n]+s;yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("(\d*)",s).group(0)

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t)if t else n

will be n if t is empty, and int(t) otherwise.

s=s[len(t):]

This removes the number that the regular expression found from s. (If there's no number found, it'll remove 0 characters, leaving s untruncated.)

w=w[:n]+s

replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

Python 3, 172 195 156 123 122 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("(\d*)",s).group(0);n=int(t)if t else n;s=s[len(t):];w=w[:n]+s;yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("(\d*)",s).group(0)

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t)if t else n

will be n if t is empty, and int(t) otherwise.

s=s[len(t):]

This removes the number that the regular expression found from s. (If there's no number found, it'll remove 0 characters, leaving s untruncated.)

w=w[:n]+s

replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

Python 3, 172 195 156 123 122 121 bytes

import re
def f(l,n=0,w=""):
 for s in l:t=re.match("(\d*)",s).group(0);n=int([n,t][t>'']);s=s[len(t):];w=w[:n]+s;yield w

Explanation

I caved, and used Regular Expressions. This saved at least 17 bytes. :

t=re.match("(\d*)",s).group(0)

When the string doesn't begin with a digit at all, the length of this string will be 0. This means that:

n=int(t)if t else n

will be n if t is empty, and int(t) otherwise.

s=s[len(t):]

This removes the number that the regular expression found from s. (If there's no number found, it'll remove 0 characters, leaving s untruncated.)

w=w[:n]+s

replaces all but the first n characters of the previous word with the current word fragment; and:

yield w

outputs the current word.

8 deleted 47 characters in body
source | link
7 deleted 321 characters in body
source | link
6 added 16 characters in body
source | link
5 deleted 309 characters in body
source | link
    Post Undeleted by wizzwizz4
4 Fixed! :-D
source | link
    Post Deleted by wizzwizz4
3 added 57 characters in body
source | link
2 added 483 characters in body
source | link
1
source | link