Это похоже на подсчет, скажем, от 0000 до 9999, что соответствует четырем словам по десять букв каждое: 0000-> 0001-> 0002 -> ...-> 0009-> 0010 -> ...На каждом этапе вы увеличиваете последнюю цифру, а когда она переворачивается, вы увеличиваете предыдущую и т. Д. До тех пор, пока первая цифра не перевернется, и вы закончите.итератор:
def count(limits):
idcs = [0] * len(limits)
while True:
yield tuple(idcs)
for n in range(len(limits)-1, -1, -1):
idcs[n] += 1
if idcs[n] != limits[n]:
break
elif n == 0:
raise StopIteration
else:
idcs[n] = 0
words = ['foo', 'bar', 'xyzzy']
for idcs in count(map(len, words)):
chars = map(lambda w, i: w[i], words, idcs)
print idcs, chars