Q:

Zip operator parameter based on loop condition

I want to increase the number of items I zip in a string based on a for loop. 
So for example, this is the code
 s = "abcde"

 for i in range(1, len(s)):

    #if i = 1, then this should be the code statement
    l = zip(s, s[1:]) #list(l) = [('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e')]

    #if i = 2, then 
    l = zip(s, s[1:], s[2:]) #list(l) = [('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e')]

    #if i = 3, then 
    l = zip(s, s[1:], s[2:], s[3:]) #list(l) = [('a', 'b', 'c', 'd'), ('b', 'c', 'd', 'e')]

Observe that for any given i, there are i + 1 iterables in the zip operator.

A:

>>> s = '123456'
>>>
>>> for n in range(1, len(s)):
    print(list(zip(*[s[i:] for i in range(0,n+1)])))

[('1', '2'), ('2', '3'), ('3', '4'), ('4', '5'), ('5', '6')]
[('1', '2', '3'), ('2', '3', '4'), ('3', '4', '5'), ('4', '5', '6')]
[('1', '2', '3', '4'), ('2', '3', '4', '5'), ('3', '4', '5', '6')]
[('1', '2', '3', '4', '5'), ('2', '3', '4', '5', '6')]
[('1', '2', '3', '4', '5', '6')]

[s[i:] for i in range(0,n+1)]

Is a list comprehension that creates a list of slices of s.
For n=2 it creates the list [s[0:], s[1:], s[2:]].
It can be written as a regular for loop:
l = []
for i in range(0,n+1):
    #print(i, 's[{}:]'.format(i))
    l.append(s[i:])

Using the regular for loop used in your solution would be:
for n in range(1, len(s)):
    #print('n:{}'.format(n), '**********')
    l = []
    for i in range(0, n+1):
        l.append(s[i:])
        #print(l)
    print(list(zip(*l)))

Here is a function adapted from an itertools recipe that does something similar.
import itertools
def nwise(iterable, n=2):
    "s -> (s0,s1), (s1,s2), (s2, s3), ... for n=2"
    iterables = itertools.tee(iterable, n)
    # advance each iterable to the appropriate starting point
    for i, thing in enumerate(iterables[1:],1):
        for _ in range(i):
            next(thing, None)
    return zip(*iterables)

For your use:
for n in range(1, len(s)):
    print(list(nwise(s, n+1)))

