def choose(n, k):
    if k == 0:
        yield ()
        return
    if n < k:
        return
    for r in choose(n-1,k-1):
        yield (True,) + r
    for r in choose(n-1,k):
        yield (False,) + r

def compress(seq1, seq2):
    ''' yeild seq1 values where seq2 is true '''
    i1, i2 = iter(seq1), iter(seq2)
    while i1 and i2:
        val = i1.next()
        if i2.next():
            yield val

def combinations(seq, k):
    for choice in choose(len(seq), k):
        yield tuple(compress(seq, choice))

sequence = (50,60,70,80,90)
k = 3
for combination in combinations(sequence,k):
    print combination
