<p>此表达式有两个问题:</p>
<pre><code> [n + '-' for n in lis[:i]] + lis[i] + ['-'+ n for n in lis[:i]]
</code></pre>
<p>首先,对于<code>size = 5</code>,<code>lis</code>的长度是5个元素。但是,其索引<code>i</code>的范围是从<code>0</code>到<code>9</code>(<code>range(2*size)</code>),因此<code>i</code>的近一半值将导致<code>lis</code>上的索引错误</p>
<p>其次,假设<code>i</code>在边界内,我们将包含三个对象:</p>
<pre><code>[n + '-' for n in lis[:i]] # a list
lis[i] # a string
['-'+ n for n in lis[:i]] # a list
</code></pre>
<p>为了实现这一点,我们需要将其表示为所有列表:</p>
<pre><code>[n + '-' for n in lis[:i]] + lis[i:i+1] + ['-'+ n for n in lis[:i]]
</code></pre>
<p>剩下的我就交给你处理了。对我来说,这似乎是一个潜在的<em>递归</em>问题:</p>
<pre><code>from string import ascii_lowercase as alphabet
def alphagram(size, row=1):
if row:
start = size - abs(row)
letters = alphabet[size-1:start:-1] + alphabet[start:size]
print('-'.join(letters).center(4*size-3, '-'))
alphagram(size, row+1 if row != size else 1-row)
alphagram(6)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>> python3 test.py
f
f-e-f
f-e-d-e-f
f-e-d-c-d-e-f
f-e-d-c-b-c-d-e-f
f-e-d-c-b-a-b-c-d-e-f
f-e-d-c-b-c-d-e-f
f-e-d-c-d-e-f
f-e-d-e-f
f-e-f
f
>
</code></pre>
<p>我们可以以@AnnZen的方式执行紧凑的<em>迭代</em>解决方案,但将其转换为Python;-)</p>
<pre><code>from itertools import chain
from string import ascii_lowercase as lower
size = 5
for n in chain(range(1, size+1), range(size-1, 0, -1)):
print('-'.join(lower[size-1:size-n:-1] + lower[size-n:size]).center(4*size-3, '-'))
</code></pre>