擅长:python、mysql、java
<p>在第二个示例中,您将处理两个不同的列表:<code>tribo</code>和<code>signature</code>。当您增加<code>i</code>的索引时,您尝试从<code>signature</code>获取该索引-但是<code>signature</code>只有三个元素,因此当<code>i*3 > 2</code>时,您会得到一个<code>IndexError</code>。你知道吗</p>
<p>解决此问题的更好方法不是创建两个不同的数组,而是使用原始代码,然后从返回的数组中切掉前三个元素:</p>
<pre><code>def tribonacci(signature, n):
a, b, c = signature
...
return tribo[3:]
</code></pre>
<p>不必使用三个不同的变量来存储这三个元素,您还可以利用python的<em>负面列表incides</em>的思想(从后面而不是前面开始计算)。执行此操作的<code>tribonacci</code>的更简洁实现可能如下所示:</p>
<pre><code>def tribonacci(signature, n):
tribo = signature[:] # copy the contents of signature, to start with
for i in range(n):
# add the last three elements of tribo together, and append the sum
tribo.append(
tribo[-1] + tribo[-2] + tribo[-3]
)
return tribo[3:]
</code></pre>
<p>如果给定的<code>signature</code>小于3个元素,那么这将给您一个<code>IndexError</code>。你知道吗</p>