Printing letters in order like a pyramid
I propose a different method!
If you generate the center, and the size of the shape you can do the entire thing easily with str.format.

&gt;&gt;&gt; '{0:-^16}'.format('yo')
'-------yo-------'


Simple.

The biggest problem is getting the diamond shape.
But this can be done with ease.
For the amount of different letters you want per line it goes:

1, 2, 3, 4, 3, 2, 1


Where the character you want goes:

3, 2, 1, 0, 1, 2, 3


If you make a range that goes like the first, you can change it to the second by subtracting from 4 each time.

I'll define this range as:

def piramid_range(size):
    return range(1, size) + range(size, 0, -1)


A quick run of size 4 gives us the correct output.
And subtracting from 4 each time gives us the correct output too.

&gt;&gt;&gt; piramid_range(4)
[1, 2, 3, 4, 3, 2, 1]
&gt;&gt;&gt; [4 - i for i in piramid_range(4)]
[3, 2, 1, 0, 1, 2, 3]


and so adding this all together, with two comprehensions makes for a nice small function:

def draw(size):
    fmt = '{{0:-^{size}}}'.format(size=4 * size - 3)
    return '\n'.join(
        fmt.format('-'.join([alphabet[size - s] for s in piramid_range(inner_size)]))
        for inner_size in piramid_range(size)
    )


And finally, as I think your separator character is quite ugly, I think adding the ability to change it would be nice. This is just replacing its two occurrences.

def draw(size, char='-'):
    fmt = '{{0:{char}^{size}}}'.format(char=char, size=4 * size - 3)
    return '\n'.join(
        fmt.format(char.join([alphabet[size - s] for s in piramid_range(inner_size)]))
        for inner_size in piramid_range(size)
    )

print draw(4)
print
print draw(4, char=' ')


Which would have the following output:




------d------
----d-c-d----
--d-c-b-c-d--
d-c-b-a-b-c-d
--d-c-b-c-d--
----d-c-d----
------d------

      d
    d c d
  d c b c d
d c b a b c d
  d c b c d
    d c d
      d