## Python 3.6+, 172195156123122121 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+, 172195156123122121 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+, 172195156123122121 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.

## Python 3.6+, 172195156123122121121 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, 172195156123122121 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+, 172195156123122121 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

## Python 3, 172195156123122122 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, 172195156123122 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, 172195156123122 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
7 deleted 321 characters in body
6 added 16 characters in body
5 deleted 309 characters in body
Post Undeleted by wizzwizz4
4 Fixed! :-D
Post Deleted by wizzwizz4
3 added 57 characters in body
2 added 483 characters in body
1