The following simply splits each element into subelements of no more than k = 10 chars:
k = 10
[x[i:i+k] for x in list1 for i in range(0, len(x), k)]
Result:
['There', 'are two', 'goats on t', 'he bridge']
If you want to
split at spaces into k = 10 plus/minus t = 2 characters, you'll need a slightly more complex approach:
from functools import reduce
import operator
def split_about_k(s, k=10, t=1):
"""split s at spaces into k +/- t sized subtsrings"""
i = 0
while i < len(s)-k:
j = s.rfind(' ', i+k-t, i+k+t)
if j < 0:
yield s[i:i+k]
i = i + k
else:
yield s[i:j]
i = j + 1
yield s[i:]
reduce(operator.concat, [list(split_about_k(x, 10, 2)) for x in list1])
Result:
['There', 'are two', 'goats on', 'the bridge']