zip list with a single element

You can use the built-in map function:

>>> elements = [1, 2, 3, 4]
>>> key = 'a'
>>> map(lambda e: (e, key), elements)
[(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]

lst = [1,2,3,4]
tups = [(itm, 'a') for itm in lst]
tups

> [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]

This is the cloest to your Haskell solution:

import itertools

def zip_with_scalar(l, o):
    return zip(l, itertools.repeat(o))

You could also use generators, which avoid creating a list like comprehensions do:

def zip_with_scalar(l, o):
    return ((i, o) for i in l)